]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
expand: Handle variable-length vector constructors with debug [PR123392]
authorTejas Belagod <tejas.belagod@arm.com>
Tue, 13 Jan 2026 16:58:38 +0000 (16:58 +0000)
committerTejas Belagod <tejas.belagod@arm.com>
Wed, 14 Jan 2026 15:45:02 +0000 (15:45 +0000)
Variable-length Vector initializer constructors currently only work in
non-debug mode.  It ICEs when compiled with -g.  This patch fixes it to handle
variable-length vector intialization by limiting the constructor elements to
the lower bound of the variable length poly which is also the maximum number
of elements allowed in the initializer.

PR middle-end/123392
gcc/
* cfgexpand.cc (expand_debug_expr): Handle variable-length initializer
for CONSTRUCTOR.

gcc/testsuite/

* gcc.target/aarch64/sve/acle/general/pr123392.c: New.

gcc/cfgexpand.cc
gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr123392.c [new file with mode: 0644]

index a338f4a96d79958b44289b3cca9d73fe3af958fb..02f4c272c675605e6049eba113ad6c36af8ecfa2 100644 (file)
@@ -5657,12 +5657,10 @@ expand_debug_expr (tree exp)
       else if (TREE_CODE (TREE_TYPE (exp)) == VECTOR_TYPE)
        {
          unsigned i;
-         unsigned HOST_WIDE_INT nelts;
+         poly_uint64 elts = TYPE_VECTOR_SUBPARTS (TREE_TYPE (exp));
+         unsigned HOST_WIDE_INT nelts = constant_lower_bound (elts);
          tree val;
 
-         if (!TYPE_VECTOR_SUBPARTS (TREE_TYPE (exp)).is_constant (&nelts))
-           goto flag_unsupported;
-
          op0 = gen_rtx_CONCATN (mode, rtvec_alloc (nelts));
 
          FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (exp), i, val)
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr123392.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr123392.c
new file mode 100644 (file)
index 0000000..5fe9848
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -g" } */
+
+#include <arm_sve.h>
+
+svint32_t res (int32_t *a)
+{
+  svint32_t s = { a[0], a[1], a[2], a[3] };
+  return s;
+}