]> gcc.gnu.org Git - gcc.git/commitdiff
middle-end/102587 - avoid auto-init for VLA vectors
authorRichard Biener <rguenther@suse.de>
Mon, 4 Oct 2021 08:02:39 +0000 (10:02 +0200)
committerRichard Biener <rguenther@suse.de>
Mon, 4 Oct 2021 08:57:23 +0000 (10:57 +0200)
This avoids ICEing for VLA vector auto-init by not initializing.

2021-10-04  Richard Biener  <rguenther@suse.de>

PR middle-end/102587
* internal-fn.c (expand_DEFERRED_INIT): Guard register
initialization path an avoid initializing VLA registers
with it.

* gcc.target/aarch64/sve/pr102587-1.c: New testcase.
* gcc.target/aarch64/sve/pr102587-2.c: Likewise.

gcc/internal-fn.c
gcc/testsuite/gcc.target/aarch64/sve/pr102587-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/pr102587-2.c [new file with mode: 0644]

index 8312d08aab2a9dd1c346aecd8a46ee4856deb322..ef5dc90db5615c11961516a2230b751a0699b05c 100644 (file)
@@ -3035,7 +3035,8 @@ expand_DEFERRED_INIT (internal_fn, gcall *stmt)
       /* Expand this memset call.  */
       expand_builtin_memset (m_call, NULL_RTX, TYPE_MODE (var_type));
     }
-  else
+  /* ???  Deal with poly-int sized registers.  */
+  else if (tree_fits_uhwi_p (TYPE_SIZE_UNIT (var_type)))
     {
       /* If this variable is in a register, use expand_assignment might
         generate better code.  */
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr102587-1.c b/gcc/testsuite/gcc.target/aarch64/sve/pr102587-1.c
new file mode 100644 (file)
index 0000000..2b9a68b
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-ftrivial-auto-var-init=zero" } */
+
+void foo() { __SVFloat64_t f64; }
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pr102587-2.c b/gcc/testsuite/gcc.target/aarch64/sve/pr102587-2.c
new file mode 100644 (file)
index 0000000..4cdb905
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-ftrivial-auto-var-init=pattern" } */
+
+void foo() { __SVFloat64_t f64; }
This page took 0.073978 seconds and 5 git commands to generate.