https://gcc.gnu.org/g:c79bcca7fb46b77157e9c7b467e97acccbce64fc

commit r16-6774-gc79bcca7fb46b77157e9c7b467e97acccbce64fc
Author: Tejas Belagod <[email protected]>
Date:   Tue Jan 13 16:58:38 2026 +0000

    expand: Handle variable-length vector constructors with debug [PR123392]
    
    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.

Diff:
---
 gcc/cfgexpand.cc                                             |  6 ++----
 gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr123392.c | 10 ++++++++++
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/gcc/cfgexpand.cc b/gcc/cfgexpand.cc
index a338f4a96d79..02f4c272c675 100644
--- a/gcc/cfgexpand.cc
+++ b/gcc/cfgexpand.cc
@@ -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
index 000000000000..5fe9848998d0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr123392.c
@@ -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;
+}

Reply via email to