In categorize_ctor_elements_1 we do
VECTOR_CST_NELTS (value).to_constant ()
but VALUE's type can be a VLA vector (since
r15-5780-g17b520a10cdaab).
This patch uses constant_lower_bound instead.
PR middle-end/116595
gcc/ChangeLog:
* expr.cc (categorize_ctor_elements_1): Use
constant_lower_bound.
gcc/testsuite/ChangeLog:
* g++.target/riscv/rvv/autovec/pr116595.C: New test.
case VECTOR_CST:
{
- /* We can only construct constant-length vectors using
- CONSTRUCTOR. */
- unsigned int nunits = VECTOR_CST_NELTS (value).to_constant ();
+ unsigned int nunits
+ = constant_lower_bound
+ (TYPE_VECTOR_SUBPARTS (TREE_TYPE (value)));
for (unsigned int i = 0; i < nunits; ++i)
{
tree v = VECTOR_CST_ELT (value, i);
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv" } */
+
+#include <riscv_vector.h>
+
+void
+vsseg (float *a, vfloat32mf2_t b, vfloat32mf2_t c, unsigned long vl)
+{
+ vfloat32mf2x2_t foo = vfloat32mf2x2_t ();
+}