d: Fix infinite loop in isAliasThisTuple
This reverts a change in the upstream D implementation of the compiler, as the refactoring introduced a regression. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 51816cd01d. Reviewed-on: https://github.com/dlang/dmd/pull/21155
This commit is contained in:
parent
1b5b02be57
commit
639376154e
3 changed files with 26 additions and 14 deletions
|
@ -1,4 +1,4 @@
|
|||
ed17b3e95dc3fc3264a4c91843da824f5541f3e1
|
||||
51816cd01deee5cc1d7d2c6e1e24788ec655b73e
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the dlang/dmd repository.
|
||||
|
|
|
@ -641,21 +641,25 @@ TupleDeclaration isAliasThisTuple(Expression e)
|
|||
Type t = e.type.toBasetype();
|
||||
while (true)
|
||||
{
|
||||
Dsymbol s = t.toDsymbol(null);
|
||||
if (!s)
|
||||
return null;
|
||||
auto ad = s.isAggregateDeclaration();
|
||||
if (!ad)
|
||||
return null;
|
||||
s = ad.aliasthis ? ad.aliasthis.sym : null;
|
||||
if (s && s.isVarDeclaration())
|
||||
if (Dsymbol s = t.toDsymbol(null))
|
||||
{
|
||||
TupleDeclaration td = s.isVarDeclaration().toAlias().isTupleDeclaration();
|
||||
if (td && td.isexp)
|
||||
return td;
|
||||
if (auto ad = s.isAggregateDeclaration())
|
||||
{
|
||||
s = ad.aliasthis ? ad.aliasthis.sym : null;
|
||||
if (s && s.isVarDeclaration())
|
||||
{
|
||||
TupleDeclaration td = s.isVarDeclaration().toAlias().isTupleDeclaration();
|
||||
if (td && td.isexp)
|
||||
return td;
|
||||
}
|
||||
if (Type att = t.aliasthisOf())
|
||||
{
|
||||
t = att;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Type att = t.aliasthisOf())
|
||||
t = att;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
8
gcc/testsuite/gdc.test/compilable/test21153.d
Normal file
8
gcc/testsuite/gdc.test/compilable/test21153.d
Normal file
|
@ -0,0 +1,8 @@
|
|||
// https://github.com/dlang/dmd/issues/21153
|
||||
alias AliasSeq(TList...) = TList;
|
||||
class DataClass;
|
||||
void reduce(DataClass[] r)
|
||||
{
|
||||
alias Args = AliasSeq!(DataClass);
|
||||
Args result = r[0];
|
||||
}
|
Loading…
Add table
Reference in a new issue