expr: Use constant_lower_bound classifying constructor els [PR116595].

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.
This commit is contained in:
Robin Dapp 2025-04-03 16:46:05 +02:00
parent ee65440cbd
commit f183ae0ae8
2 changed files with 13 additions and 3 deletions

View file

@ -7193,9 +7193,9 @@ categorize_ctor_elements_1 (const_tree ctor, HOST_WIDE_INT *p_nz_elts,
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);

View file

@ -0,0 +1,10 @@
/* { 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 ();
}