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

Reply via email to