middle-end/104786 - ICE with asm and VLA

The following fixes an ICE observed with a MEM_REF allows_mem asm
operand referencing a VLA.  The following makes sure to not attempt
to go the temporary creation way when we cannot.

2022-03-09  Richard Biener  <rguenther@suse.de>

	PR middle-end/104786
	* cfgexpand.cc (expand_asm_stmt): Do not generate a copy
	for VLAs without an upper size bound.

	* gcc.dg/pr104786.c: New testcase.
This commit is contained in:
Richard Biener 2022-03-09 10:55:49 +01:00
parent 1c7b110e1e
commit ba3ff5e351
2 changed files with 11 additions and 1 deletions

View File

@ -3297,7 +3297,9 @@ expand_asm_stmt (gasm *stmt)
&& GET_MODE (DECL_RTL (val)) != TYPE_MODE (type)))
|| ! allows_reg
|| is_inout
|| TREE_ADDRESSABLE (type))
|| TREE_ADDRESSABLE (type)
|| (!tree_fits_poly_int64_p (TYPE_SIZE (type))
&& !known_size_p (max_int_size_in_bytes (type))))
{
op = expand_expr (val, NULL_RTX, VOIDmode,
!allows_reg ? EXPAND_MEMORY : EXPAND_WRITE);

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-options "-std=gnu90" } */
void h(void *di, int num)
{
char (*t)[num] = di;
__asm__ ("" : "=X"( *t));
}