This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
LTO ICE in D Frontend
- From: Iain Buclaw <ibuclaw at gdcproject dot org>
- To: gcc at gcc dot gnu dot org
- Date: Thu, 10 Jul 2014 07:31:54 +0100
- Subject: LTO ICE in D Frontend
- Authentication-results: sourceware.org; auth=none
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>>