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.
&& 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);
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-std=gnu90" } */
+
+void h(void *di, int num)
+{
+ char (*t)[num] = di;
+ __asm__ ("" : "=X"( *t));
+}