https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103804
Bug ID: 103804
Summary: ICE: 'global_options' are modified in local context
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Keywords: ice-on-invalid-code
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: asolokha at gmx dot com
CC: marxin at gcc dot gnu.org
Target Milestone: ---
Target: powerpc-*-linux-gnu
gcc, at least configured for powerpc target and invoked w/ -mcpu= set to a
value valid to that target, ICEs when compiling testcases w/ explicitly wrong
(non-powerpc)
#pragrma GCC target ("")
statements and
__attribute__ ((optimize ()))
set on a function.
The following testcase was extracted from
gcc/testsuite/gcc.target/aarch64/vect-widen-add.c:
#pragma GCC target "+nosve"
#define ARR_SIZE 1024
__attribute__((optimize (0))) void
uadd_nonopt (unsigned int *foo, unsigned short int *a, unsigned short int *b)
{
for( int i = 0; i < ARR_SIZE - 3;i=i+4)
{
foo[i] = a[i] + b[i];
foo[i+1] = a[i+1] + b[i+1];
foo[i+2] = a[i+2] + b[i+2];
foo[i+3] = a[i+3] + b[i+3];
}
}
% powerpc-e300c3-linux-gnu-gcc-12.0.0 -mcpu=401 -c mpvyvgwx.c
mpvyvgwx.c:1:9: error: #pragma GCC target '+nosve' is invalid
1 | #pragma GCC target "+nosve"
| ^~~
mpvyvgwx.c:7:1: internal compiler error: 'global_options' are modified in local
context
7 | {
| ^
0xd9f405 cl_optimization_compare(gcc_options*, gcc_options*)
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211219/work/build/gcc/options-save.c:14201
0x921b69 handle_optimize_attribute
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211219/work/gcc-12-20211219/gcc/c-family/c-attribs.c:5507
0x8161f7 decl_attributes(tree_node**, tree_node*, int, tree_node*)
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211219/work/gcc-12-20211219/gcc/attribs.c:867
0x834f08 start_function(c_declspecs*, c_declarator*, tree_node*)
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211219/work/gcc-12-20211219/gcc/c/c-decl.c:9516
0x8983aa c_parser_declaration_or_fndef
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211219/work/gcc-12-20211219/gcc/c/c-parser.c:2445
0x8a0eeb c_parser_external_declaration
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211219/work/gcc-12-20211219/gcc/c/c-parser.c:1779
0x8a176b c_parser_translation_unit
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211219/work/gcc-12-20211219/gcc/c/c-parser.c:1652
0x8a176b c_parse_file()
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211219/work/gcc-12-20211219/gcc/c/c-parser.c:23331
0x9081a9 c_common_parse_file()
/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-12.0.0_p20211219/work/gcc-12-20211219/gcc/c-family/c-opts.c:1238