https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78038
Bug ID: 78038 Summary: internal compiler error: in get_sub_rtx, at ree.c:655 Product: gcc Version: 6.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: steffen-schmidt at siemens dot com Target Milestone: --- Created attachment 39840 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=39840&action=edit Test source file Dear GCC maintainers, we found that gcc / g++ crashes with internal compiler error in get_sub_rtx, at ree.c:655 at optimization level -O2 Target plattform is aarch64-elf, in detail -march=armv8-a -mabi=ilp32 It seems the the order of the statements, especially the call to a function pointer and use of global register variable is important. Unfortunately I could not determine a dedicated optimization option causing the problem. Thanks for in advance for any help. ------------------------------------------------------------------------------- aarch64-elf-g++ -v Using built-in specs. COLLECT_GCC=aarch64_gcc_elf_6.1.0\bin\aarch64-elf-g++ COLLECT_LTO_WRAPPER=aarch64_gcc_elf_6.1.0/bin/../libexec/gcc/aarch64-elf/6.1.0/lto-wrapper.exe Target: aarch64-elf Configured with: ../../gcc-6.1.0//configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --prefix=/build/aarch64-elf_6.1.0_x64/cross-gcc/aarch64-elf --target=aarch64-elf --disable-nls --enable-multilib --with-multilib-list=lp64,ilp32 --enable-languages=c,c++ --disable-decimal-float --with-sysroot=/build/aarch64-elf_6.1.0_x64/cross-gcc/aarch64-elf --without-headers --disable-shared --disable-threads --disable-lto --disable-libmudflap --disable-libssp --disable-libgomp --disable-libffi --disable-libstdcxx-pch --disable-win32-registry --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-newlib --with-gcc --with-gnu-as --with-gnu-ld --with-gmp=/build/aarch64-elf_6.1.0_x64/host --with-mpfr=/build/aarch64-elf_6.1.0_x64/host --with-mpc=/build/aarch64-elf_6.1.0_x64/host --with-isl=/build/aarch64-elf_6.1.0_x64/host : (reconfigured) ../../gcc-6.1.0//configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --enable-languages=c,c++ --enable-multilib --with-multilib-list=lp64,ilp32 --disable-lto --disable-libmudflap --disable-libssp --disable-libgomp --disable-libffi --with-newlib --with-gcc --with-gnu-ld --with-gnu-as --with-stabs --disable-shared --disable-threads --disable-win32-registry --disable-nls --disable-libstdcxx-pch --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --target=aarch64-elf --prefix=/build/aarch64-elf_6.1.0_x64/cross-gcc/aarch64-elf --with-gmp=/build/aarch64-elf_6.1.0_x64/host --with-mpfr=/build/aarch64-elf_6.1.0_x64/host --with-mpc=/build/aarch64-elf_6.1.0_x64/host --with-isl=/build/aarch64-elf_6.1.0_x64/host --with-sysroot=/build/aarch64-elf_6.1.0_x64/cross-gcc/aarch64-elf Thread model: single gcc version 6.1.0 (GCC) ------------------------------------------------------------------------------- // Test file test.cpp: typedef void (*test_fptr_t)(void); void test_f (void) { } test_fptr_t test_fptr = test_f; struct test2_s { int f; }; register struct test2_s *g __asm__("x28"); void do_something() { test_fptr(); struct test2_s *p1 = 0; *p1 = *g; } ------------------------------------------------------------------------------- aarch64-elf-g++ -mabi=ilp32 -O2 -march=armv8-a -c -o test.o test.cpp