Created attachment 33226 [details] Test case This reproduces with at least GCC 4.8.2, 4.8.3, and SVN r213491. I believe it's present in every version that supports the aarch64 target. I have been using GCC configured with: configure --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=aarch64-unknown-linux-gnu --enable-languages=c,c++ --enable-threads=posix --enable-shared --disable-libsanitizer --disable-gnu-indirect-function --disable-gnu-unique-object --with-sysroot=/gcc-debug/Linux-aarch64-sysroot --disable-multilib The simplest reproduction case that I've found is to precompile a header with exactle one line in it, call it precomp.h: #define CEILF(f) ceilf(f) Compile the PCH with: aarch64-unknown-linux-gnu-gcc -nostdinc -march=armv8-a -fPIC -O2 -ftree-vectorize -x c++-header -c precomp.h -o precomp.h.ghc Then build the attached longish creduce'd test case with: aarch64-unknown-linux-gnu-gcc -nostdinc -march=armv8-a -fPIC -O2 -ftree-vectorize -x c++ -include precomp.h -Winvalid-pch -c test.c It fails with SEGV: test.c: In function ‘void x127()’: test.c:141:1: internal compiler error: Segmentation fault x127 () ^ 0x899d958 crash_signal /gcc-debug/gcc-svn/gcc/toplev.c:337 0x81bbd62 contains_struct_check(tree_node*, tree_node_structure_enum, char const*, int, char const*) /gcc-debug/gcc-svn/gcc/tree.h:2841 0x87208ca gimple_build_call_1 /gcc-debug/gcc-svn/gcc/gimple.c:216 0x872093d gimple_build_call_vec(tree_node*, vec<tree_node*, va_heap, vl_ptr>) /gcc-debug/gcc-svn/gcc/gimple.c:230 0x8bd85e0 vectorizable_call /gcc-debug/gcc-svn/gcc/tree-vect-stmts.c:2470 0x8be7b1f vect_transform_stmt(gimple_statement_base*, gimple_stmt_iterator*, bool*, _slp_tree*, _slp_instance*) /gcc-debug/gcc-svn/gcc/tree-vect-stmts.c:7237 0x8bfb143 vect_transform_loop(_loop_vec_info*) /gcc-debug/gcc-svn/gcc/tree-vect-loop.c:6079 0x8c0e4f1 vectorize_loops() /gcc-debug/gcc-svn/gcc/tree-vectorizer.c:478 0x8b1c75c execute /gcc-debug/gcc-svn/gcc/tree-ssa-loop.c:232 It looks like the reason for the failure is that the global table aarch64_builtin_decls in aarch64-builtins.c isn't relocated when loading the PCH. All of the nodes that it points to are freed, and the memory may get reused (or poisoned, if that's enabled). The table is properly annotated with the GTY macro, but aarch64-builtins.c isn't in GTFILES so it's not processed by the type generator. If I manually add aarch64-builtins.c to target_gtfiles (and include the resulting gt-aarch64-builtins.h at the bottom of the C file) then this problem goes away.
Confirmed.
Also happens with a aarch64-elf gcc.
(In reply to Robert Morell from comment #0) > If I manually add aarch64-builtins.c to target_gtfiles (and include the > resulting gt-aarch64-builtins.h at the bottom of the C file) then this > problem goes away. That is the correct fix. I am testing this fix then and will be applying to the trunk as obvious after I test it.
Did the fix for this make it to trunk?
Fixed.
Author: pinskia Date: Tue Nov 11 23:40:03 2014 New Revision: 217394 URL: https://gcc.gnu.org/viewcvs?rev=217394&root=gcc&view=rev Log: 2014-11-11 Andrew Pinski <apinski@cavium.com> Bug target/61997 * config.gcc (aarch64*-*-*): Set target_gtfiles to include aarch64-builtins.c. * config/aarch64/aarch64-builtins.c: Include gt-aarch64-builtins.h at the end of the file. Modified: trunk/gcc/ChangeLog trunk/gcc/config.gcc trunk/gcc/config/aarch64/aarch64-builtins.c
Author: yroux Date: Tue Jan 13 08:52:55 2015 New Revision: 219522 URL: https://gcc.gnu.org/viewcvs?rev=219522&root=gcc&view=rev Log: 2015-01-13 Michael Collison <michael.collison@linaro.org> Backport from trunk r217394. 2014-11-11 Andrew Pinski <apinski@cavium.com> Bug target/61997 * config.gcc (aarch64*-*-*): Set target_gtfiles to include aarch64-builtins.c. * config/aarch64/aarch64-builtins.c: Include gt-aarch64-builtins.h at the end of the file. Modified: branches/linaro/gcc-4_9-branch/gcc/ChangeLog.linaro branches/linaro/gcc-4_9-branch/gcc/config.gcc branches/linaro/gcc-4_9-branch/gcc/config/aarch64/aarch64-builtins.c