https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98043
Bug ID: 98043
Summary: (Regression) ICE in verify_gimpl due to bitpacked enum
class (amd64)
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: BenWiederhake.GitHub at gmx dot de
Target Milestone: ---
Created attachment 49640
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49640&action=edit
Preprocessed source code
Compiling the following code crashes g++-10 and g++-11, but not g++-9:
// g++ -std=c++2a -o /tmp/example.cpp.o -c example.cpp
enum class MyEnumClass { A };
struct MyClass {
MyEnumClass foobar : 8 { MyEnumClass::A };
};
bool some_function(MyClass x)
{
switch (x.foobar) {
case MyEnumClass::A:
return false;
}
}
See at the bottom the exact invocation, error messages, and g++ versions.
The enum-class, bit-packing, the seemingly incomplete switch-case, non-constant
switch-argument, all seem to be necessary to trigger the bug.
This bug seems very similar to
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97634 , but it's a different
platform. Feel free to merge if it's the same bug.
* What was the outcome of this action?
Compiler crash (error message see below)
* What outcome did you expect instead?
Either a successful compilation, or a compilation error; but not a compiler
crash.
Full error message and versions:
$ /usr/bin/g++-9 --version
g++-9 (Debian 9.3.0-18) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ /usr/bin/g++-9 -std=c++2a -o /tmp/example.cpp.o -c example.cpp
example.cpp: In function ‘bool some_function(MyClass)’:
example.cpp:12:1: warning: control reaches end of non-void function [-Wreturn-
type]
12 | }
| ^
$ /usr/bin/g++-10 --version
g++-10 (Debian 10.2.0-16) 10.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ /usr/bin/g++-10 -std=c++2a -o /tmp/example.cpp.o -c example.cpp
example.cpp: In function ‘bool some_function(MyClass)’:
example.cpp:6:6: error: type precision mismatch in switch statement
6 | bool some_function(MyClass x)
| ^~~~~~~~~~~~~
switch (_1) <default: <D.2095>, case 0: <D.2092>>
example.cpp:6:6: internal compiler error: ‘verify_gimple’ failed
0x128422d verify_gimple_in_seq(gimple*)
../../src/gcc/tree-cfg.c:5144
0xf85436 gimplify_body(tree_node*, bool)
../../src/gcc/gimplify.c:14888
0xf856a3 gimplify_function_tree(tree_node*)
../../src/gcc/gimplify.c:14978
0xdbbe27 cgraph_node::analyze()
../../src/gcc/cgraphunit.c:670
0xdbee27 analyze_functions
../../src/gcc/cgraphunit.c:1227
0xdbf9f2 symbol_table::finalize_compilation_unit()
../../src/gcc/cgraphunit.c:2986
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <file:///usr/share/doc/gcc-10/README.Bugs> for instructions.
$ /usr/lib/gcc-snapshot/bin/g++ --version
g++ (Debian 20201127-1) 11.0.0 20201127 (experimental) [master revision
3493b0c3281:5c47353bc97:5e9f814d754be790aec5b69a95699a8af2654058]
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ /usr/lib/gcc-snapshot/bin/g++ -std=c++2a -o /tmp/example.cpp.o -c example.cpp
example.cpp: In function 'bool some_function(MyClass)':
example.cpp:6:6: error: type precision mismatch in switch statement
6 | bool some_function(MyClass x)
| ^~~~~~~~~~~~~
switch (_1) <default: <D.2107>, case 0: <D.2104>>
example.cpp:6:6: internal compiler error: 'verify_gimple' failed
0x12f35bd verify_gimple_in_seq(gimple*)
../../src/gcc/tree-cfg.c:5119
0x1006b66 gimplify_body(tree_node*, bool)
../../src/gcc/gimplify.c:15329
0x1006ced gimplify_function_tree(tree_node*)
../../src/gcc/gimplify.c:15400
0xe37367 cgraph_node::analyze()
../../src/gcc/cgraphunit.c:670
0xe39e27 analyze_functions
../../src/gcc/cgraphunit.c:1235
0xe3aa1d symbol_table::finalize_compilation_unit()
../../src/gcc/cgraphunit.c:2513
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <file:///usr/share/doc/gcc-snapshot/README.Bugs> for instructions.
Downstream ticket:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=976024
Your bugs page says you also want a preprocessed source – I don't see how it's
useful, but sure: Please find attached the preprocessed file "example.ii".
Cheers,
Ben