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:
Iain Buclaw 2022-08-08 15:17:47 +02:00
parent 556e5a3b1e
commit fc7166a7c4
3 changed files with 16 additions and 0 deletions

View File

@ -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);
}

View File

@ -0,0 +1,10 @@
module imports.pr106555;
struct S106555
{
int[] f106555;
int max106555;
this(int)
{
f106555.length = max106555;
}
}

View File

@ -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" }