Hi, I'm trying to get to the bottom of a bug when using the D front-end with -flto.
When compiling anything, it always ICEs at in streamer_get_pickled_tree, at tree-streamer-in.c. The of it appears to be that the LTO frontend seems to never retrieve what it is expected to find. But I don't know what could be missing from the code generation on my side to sort that out. The following minimal test that yields an ICE. --- extern(C) int test = void; I had set a breakpoint at hash_tree and looked at debug_tree output from an equivalent program in C++, but nothing stands out as wrong here to me. Any insight would be helpful. // D DECL_NAME: <identifier_node 0x7ffff66981b8 test> DECL_CONTEXT: (null_tree) DECL_SIZE: <integer_cst 0x7ffff6540d98 type <integer_type 0x7ffff65500a8 bitsizetype> constant 32> DECL_SIZE_UNIT: <integer_cst 0x7ffff6540db0 type <integer_type 0x7ffff6550000 sizetype> constant 4> VAR_DECL: <var_decl 0x7ffff6548a20 test type <integer_type 0x7ffff65505e8 int public SI size <integer_cst 0x7ffff6540d98 constant 32> unit size <integer_cst 0x7ffff6540db0 constant 4> align 32 symtab 0 alias set 0 canonical type 0x7ffff65505e8 precision 32 min <integer_cst 0x7ffff6540d50 -2147483648> max <integer_cst 0x7ffff 6540d68 2147483647> pointer_to_this <pointer_type 0x7ffff6557690>> used public static tls-initial-exec SI file test.d line 1 col 0 size <integer_cst 0x7ffff6540d98 32> unit size <integer_cst 0x7ffff6540db0 4> align 32 (mem/c:SI (symbol_ref:DI ("test") [flags 0x2a] <var_decl 0x7ffff6548a20 test>) [0 test+0 S4 A32])> // C++ DECL_NAME: <identifier_node 0x7ffff66ad210 test public bindings <0x7ffff66ab078> local bindings <(nil)>> DECL_CONTEXT: <translation_unit_decl 0x7ffff65580a0 D.1 VOID file (null) line 0 col 0 align 1> DECL_SIZE: <integer_cst 0x7ffff655e030 type <integer_type 0x7ffff655a0a8 bitsizetype> constant 32> DECL_SIZE_UNIT: <integer_cst 0x7ffff655e048 type <integer_type 0x7ffff655a000 sizetype> constant 4> VAR_DECL: <var_decl 0x7ffff654aa20 test type <integer_type 0x7ffff655a5e8 int public SI size <integer_cst 0x7ffff655e030 constant 32> unit size <integer_cst 0x7ffff655e048 constant 4> align 32 symtab 0 alias set 0 canonical type 0x7ffff655a5e8 precision 32 min <integer_cst 0x7ffff6540fd8 -2147483648> max <integer_cst 0x7ffff 655e000 2147483647> pointer_to_this <pointer_type 0x7ffff6562690>> public static SI file test2.cc line 2 col 5 size <integer_cst 0x7ffff655e030 32> unit size <integer_cst 0x7ffff655e048 4> align 32 context <translation_unit_decl 0x7ffff65580a0 D.1> (mem/c:SI (symbol_ref:DI ("test") [flags 0x2] <var_decl 0x7ffff654aa20 test>) [0 test+0 S4 A32]) chain <function_decl 0x7ffff66a8600 __cxa_call_un expected>>