d: Fix ICE in in add_stack_var, at cfgexpand.cc:476
The type that triggers the ICE never got completed by the semantic
analysis pass. Checking for size forces it to be done, or issue a
compile-time error.
PR d/106555
gcc/d/ChangeLog:
* d-target.cc (Target::isReturnOnStack): Check for return type size.
gcc/testsuite/ChangeLog:
* gdc.dg/imports/pr106555.d: New test.
* gdc.dg/pr106555.d: New test.
(cherry picked from commit 4b0253b019
)
This commit is contained in:
parent
556e5a3b1e
commit
fc7166a7c4
|
@ -464,6 +464,8 @@ Target::isReturnOnStack (TypeFunction *tf, bool)
|
|||
return false;
|
||||
|
||||
Type *tn = tf->next->toBasetype ();
|
||||
if (tn->size () == SIZE_INVALID)
|
||||
return false;
|
||||
|
||||
return (tn->ty == TY::Tstruct || tn->ty == TY::Tsarray);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
module imports.pr106555;
|
||||
struct S106555
|
||||
{
|
||||
int[] f106555;
|
||||
int max106555;
|
||||
this(int)
|
||||
{
|
||||
f106555.length = max106555;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106555
|
||||
// { dg-do compile }
|
||||
// { dg-additional-options "-O2" }
|
||||
// { dg-additional-sources "imports/pr106555.d" }
|
Loading…
Reference in New Issue