https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90083
Bug ID: 90083 Summary: internal compiler error: in expand_debug_locations, at cfgexpand.c:5403 with -O3 and -g Product: gcc Version: 8.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: nheart at gmail dot com Target Milestone: --- Created attachment 46163 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46163&action=edit Sample triggering the bug Hey, The following code causes internal compiler error with -O{1-3} used in conjunction with -g flag. The bug gets triggered if you have a long a chain of functions that are annotated with __attribute__ ((target ("avx2"))) But the attribute annotation is missing in one of them. The code compiles fine with -mavx2: g++ -O3 -g test.cpp -mavx2 or with O0 (but produces warnings as expected): g++ -O0 -g test.cpp test.cpp: In function ‘float fooBackend(const float*, const float*) [with Register = __vector(8) float]’: test.cpp:19:12: warning: AVX vector return without AVX enabled changes the ABI [-Wpsabi] Register highest = and_ps(and_me, *begin); ^~~~~~~ test.cpp:19:28: warning: AVX vector argument without AVX enabled changes the ABI [-Wpsabi] Register highest = and_ps(and_me, *begin); ~~~~~~^~~~~~~~~~~~~~~~ test.cpp:19:28: note: The ABI for passing parameters with 32-byte alignment has changed in GCC 4.6 Compilation also succeeds when just using O3, with warnings: g++ -O3 test.cpp test.cpp: In function ‘float fooBackend(const float*, const float*) [with Register = __vector(8) float]’: test.cpp:19:12: warning: AVX vector return without AVX enabled changes the ABI [-Wpsabi] Register highest = and_ps(and_me, *begin); ^~~~~~~ However trying to compile with -O3 and -g results in a compiler crash: g++ -O3 -g test.cpp test.cpp: In function ‘float fooBackend(const float*, const float*) [with Register = __vector(8) float]’: test.cpp:19:12: warning: AVX vector return without AVX enabled changes the ABI [-Wpsabi] Register highest = and_ps(and_me, *begin); ^~~~~~~ during RTL pass: expand test.cpp: In function ‘float AVX2_foo(const float*, const float*)’: test.cpp:24:41: internal compiler error: in expand_debug_locations, at cfgexpand.c:5403 __attribute__ ((target ("avx2"))) float AVX2_foo(const float *begin, const float *end) { OS: Archlinux