https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123392
Bug ID: 123392
Summary: [15/16 regression] SVE C++ overload initialization ICE
with debug symbols since
g:17b520a10cdaabbcbaeaf30fc5228986b368ce0c
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Keywords: aarch64-sve, ice-on-valid-code
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: tnfchris at gcc dot gnu.org
CC: belagod at gcc dot gnu.org
Target Milestone: ---
Target: aarch64*
The following example:
#include <arm_sve.h>
svint32_t res (int32_t *a)
{
svint32_t s = { a[0], a[1], a[2], a[3] };
return s;
}
compiled with -O3 -march=armv9-a -g
ICEs with
<constructor 0xffff9df69228
type <vector_type 0xffff9ede8e70 svint32_t
type <integer_type 0xffff9ee565e8 int public SI
size <integer_cst 0xffff9ee58180 constant 32>
unit-size <integer_cst 0xffff9ee58198 constant 4>
align:32 warn_if_not_align:0 symtab:-1629855424 alias-set 1
canonical-type 0xffff9ee565e8 precision:32 min <integer_cst 0xffff9ee58138
-2147483648> max <integer_cst 0xffff9ee58150 2147483647>
pointer_to_this <pointer_type 0xffff9ee5eb28>>
sizes-gimplified VNx4SI
size <poly_int_cst 0xffff9ed21f00 type <integer_type 0xffff9ee560a8
bitsizetype>
constant
elt0: <integer_cst 0xffff9ee3cf78 constant 128> elt1: <integer_cst
0xffff9ee3cf78 128>>
unit-size <poly_int_cst 0xffff9ed21ee0 type <integer_type
0xffff9ee56000 sizetype>
constant
elt0: <integer_cst 0xffff9ee3cf90 constant 16> elt1: <integer_cst
0xffff9ee3cf90 16>>
align:128 warn_if_not_align:0 symtab:-1644748480 alias-set -1
structural-equality
attributes <tree_list 0xffff9ed49050
purpose <identifier_node 0xffff9ed40960 SVE type>
value <tree_list 0xffff9ed49028
value <integer_cst 0xffff9ee58048 constant 1>
chain <tree_list 0xffff9ed49000
value <integer_cst 0xffff9ee3cf60 constant 0>
chain <tree_list 0xffff9ed41fc8
value <identifier_node 0xffff9ed471e0 u11__SVInt32_t>
chain <tree_list 0xffff9ed41fa0 value <identifier_node
0xffff9ed47230 svint32_t>>>>>
chain <tree_list 0xffff9ed41f78
purpose <identifier_node 0xffff9ed40870 SVE sizeless type>>>
nunits:[4,4]>
length:4
idx <integer_cst 0xffff9ee3cfa8 type <integer_type 0xffff9ee560a8
bitsizetype> constant 0>
val <ssa_name 0xffff9ee47c60 type <integer_type 0xffff9ee565e8 int>
visited
def_stmt _1 = *a_6(D);
version:1>
idx <integer_cst 0xffff9ee58318 type <integer_type 0xffff9ee560a8
bitsizetype> constant 1>
val <ssa_name 0xffff9ee47cf0 type <integer_type 0xffff9ee565e8 int>
visited
def_stmt _2 = MEM[(int32_t *)a_6(D) + 4B];
version:2>
idx <integer_cst 0xffff9efaeaf8 type <integer_type 0xffff9ee560a8
bitsizetype> constant 2>
val <ssa_name 0xffff9ee47d80 type <integer_type 0xffff9ee565e8 int>
visited
def_stmt _3 = MEM[(int32_t *)a_6(D) + 8B];
version:3>
idx <integer_cst 0xffff9eddcb58 type <integer_type 0xffff9ee560a8
bitsizetype> constant 3>
val <ssa_name 0xffff9ee47e10 type <integer_type 0xffff9ee565e8 int>
visited
def_stmt _4 = MEM[(int32_t *)a_6(D) + 12B];
version:4>>
during RTL pass: expand
insrc.c: In function 'res':
insrc.c:3:11: internal compiler error: in expand_debug_expr, at
cfgexpand.cc:5780
3 | svint32_t res (int32_t *a)
| ^~~
and started with
commit 17b520a10cdaabbcbaeaf30fc5228986b368ce0c
Author: Tejas Belagod <[email protected]>
Date: Thu Sep 5 14:48:18 2024 +0530
c: Fix constructor bounds checking for VLA and construct VLA vector
constants
This patch adds support for checking bounds of SVE ACLE vector
initialization
constructors. It also adds support to construct vector constant from init
constructors.
gcc/c/ChangeLog:
* c-typeck.cc (process_init_element): Add check to restrict
constructor length to the minimum vector length allowed.
gcc/ChangeLog:
* tree.cc (build_vector_from_ctor): Add support to construct VLA
vector
constants from init constructors.
gcc/testsuite/ChangeLog:
* gcc.target/aarch64/sve/acle/general-c/sizeless-1.c: Update test
to
test initialize error.
* gcc.target/aarch64/sve/acle/general-c/sizeless-2.c: Likewise.
gcc/c/c-typeck.cc | 16 +++++++++++-----
.../gcc.target/aarch64/sve/acle/general-c/sizeless-1.c | 13 +++++++++++++
.../gcc.target/aarch64/sve/acle/general-c/sizeless-2.c | 12 ++++++++++++
gcc/tree.cc | 16 +++++++++++-----
4 files changed, 47 insertions(+), 10 deletions(-)