https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78890
Bug ID: 78890
Summary: [5/6/7 Regression] ICE on invalid reference type in
union
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: trippels at gcc dot gnu.org
Target Milestone: ---
Reddit user sjd96 reported the following issue:
% cat union.ii
int main() {
union {
int a;
int &b = a;
};
a = 1;
auto c = b + 1;
}
% g++ -c union.ii
union.ii: In function ‘int main()’:
union.ii:1:5: error: invalid first operand of MEM_REF
int main() {
^~~~
_2
union.ii:7:12: note: in statement
auto c = b + 1;
^
_3 = MEM[(int &)_2];
union.ii:1:5: internal compiler error: verify_gimple failed
int main() {
^~~~
0xda2bd5 verify_gimple_in_cfg(function*, bool)
/home/markus/gcc/gcc/tree-cfg.c:5266
0xc85c06 execute_function_todo
/home/markus/gcc/gcc/passes.c:1965
0xc86cab execute_todo
/home/markus/gcc/gcc/passes.c:2015
% g++ -std=c++98 -c union.ii
union.ii: In function ‘int main()’:
union.ii:4:14: warning: non-static data member initializers only available with
-std=c++11 or -std=gnu++11
int &b = a;
^
union.ii:4:14: error: in C++98 ‘main()::<unnamed union>::b’ may not have
reference type ‘int&’ because it is a member of a union
union.ii:7:8: error: ‘c’ does not name a type
auto c = b + 1;
^