https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61048
Ilya Palachev <i.palachev at samsung dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |i.palachev at samsung dot com --- Comment #1 from Ilya Palachev <i.palachev at samsung dot com> --- The error happens for the following sequence of commands g++ test.cpp -c -o test.o -fsanitize=address -flto g++ test.o -o test -Wl,-flto And does not happen for the following sequence of commands: g++ test.cpp -c -o test.o -fsanitize=address -flto g++ test.o -o test -Wl,-flto -fsanitize=address The ICE happens because sanitizer builtins are not initialized (returned tree is null). I've tried to force their initialization as follows: diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index bc53632..f5ca849 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see #include "ipa-inline.h" #include "params.h" #include "ipa-utils.h" +#include "asan.h" /* Number of parallel tasks to run, -1 if we want to use GNU Make jobserver. */ @@ -1856,6 +1857,9 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data, data_in = lto_data_in_create (decl_data, (const char *) data + string_offset, header->string_size, resolutions); + /* Initialize sanitizer builtins if necessary. */ + initialize_sanitizer_builtins(); + /* We do not uniquify the pre-loaded cache entries, those are middle-end internal types that should not be merged. */ But after applying this patch the following error happens during the 2nd command: g++ test.o -o test -Wl,-flto /tmp/ccEhycoY.ltrans0.ltrans.o:ccEhycoY.ltrans0.o:function __static_initialization_and_destruction_0(int, int): error: undefined reference to '__asan_before_dynamic_init' /tmp/ccEhycoY.ltrans0.ltrans.o:ccEhycoY.ltrans0.o:function __static_initialization_and_destruction_0(int, int): error: undefined reference to '__asan_after_dynamic_init' collect2: error: ld returned 1 exit status