re PR target/16430 (ICE when returning non-C aggregates larger than 16 bytes)

PR target/16430
	* config/sparc/sparc.c (function_value): In 64-bit mode,
	return the aggregates larger than 16 bytes like unions.

From-SVN: r84289
This commit is contained in:
Eric Botcazou 2004-07-08 16:33:20 +02:00 committed by Eric Botcazou
parent 1d511ed5fc
commit c74fd3f1fd
2 changed files with 18 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2004-07-08 Eric Botcazou <ebotcazou@libertysurf.fr>
PR target/16430
* config/sparc/sparc.c (function_value): In 64-bit mode,
return the aggregates larger than 16 bytes like unions.
2004-07-08 Eric Botcazou <ebotcazou@libertysurf.fr>
PR target/16199

View File

@ -5750,6 +5750,18 @@ function_value (tree type, enum machine_mode mode, int incoming_p)
abort (); /* shouldn't get here */
mode = mode_for_size (bytes * BITS_PER_UNIT, MODE_INT, 0);
/* ??? We probably should have made the same ABI change in
3.4.0 as the one we made for unions. The latter was
required by the SCD though, while the former is not
specified, so we favored compatibility and efficiency.
Now we're stuck for aggregates larger than 16 bytes,
because OImode vanished in the meantime. Let's not
try to be unduly clever, and simply follow the ABI
for unions in that case. */
if (mode == BLKmode)
return function_arg_union_value (bytes, mode, regbase);
}
else if (GET_MODE_CLASS (mode) == MODE_INT
&& GET_MODE_SIZE (mode) < UNITS_PER_WORD)