On Sun, Mar 29, 2015 at 07:47:18AM +0200, Jan Hubicka wrote:
> Hi,
> I actually got idea how to make partitioning safe for named labels w/o going
> the difficult
> route of makeing them part of symbol table. Will look into that tonight or
> tomorrow.
> > Also there's a juicy ICE with that worked around:
> >
> > /home/andi/lsrc/linux/drivers/scsi/bfa/bfa_ioc.c: In function
> > 'bfa_ioc_download_fw.constprop':
> > /home/andi/lsrc/linux/drivers/scsi/bfa/bfa_ioc.c:1871:0: internal compiler
> > error: Segmentation fault
> > bfa_ioc_download_fw(struct bfa_ioc_s *ioc, u32 boot_type,
> > ^
> > 0x9753a7 crash_signal
> > ../../gcc/gcc/toplev.c:383
> > 0x76d7f2 maybe_remove_unused_call_args(function*, gimple_statement_base*)
> > ../../gcc/gcc/gimple.c:2963
> > 0x677bde cgraph_edge::redirect_call_stmt_to_callee()
> > ../../gcc/gcc/cgraph.c:1478
> > 0xedac5c inline_transform(cgraph_node*)
> > ../../gcc/gcc/ipa-inline-transform.c:533
>
> This one looks odd though. Can you possibly looks for reason of the segfault?
> I suppose
> one of the pointers is NULL but don't quite see which one.
> Is the call statemnt indirect? (try debug_gimple_stmt (stmt) and debug_tree
> (decl))
I only have a core dump. It is hard to catch LTO processes in a debugger.
stmt seems to be an error node:
$3 = {code = GIMPLE_ERROR_MARK, no_warning = 0, visited = 0, nontemporal_move =
0, plf = 0,
modified = 0, has_volatile_ops = 0, pad = 0, subcode = 0, uid = 0, location =
2389971584,
num_ops = 11155, bb = 0x2b92fed33c30, next = 0x2b92fed36cb8, prev =
0x2b92fed36d10}
decl appears NULL, not surprising for an error node:
(gdb) p *(tree *)$rbx
$6 = (tree) 0x0
Also the compiler thinks the code is unreachable:
0x000000000076d7e2 <+114>: nopw 0x0(%rax,%rax,1)
0x000000000076d7e8 <+120>: mov 0x18(%rbx),%rax
0x000000000076d7ec <+124>: cmpw $0x7d,(%rax) <--- I think that's the
check for void_type_node
0x000000000076d7f0 <+128>: je 0x76d830
<maybe_remove_unused_call_args(function*, gimple_statement_base*)+192>
=> 0x000000000076d7f2 <+130>: mov 0x8,%rax <------- segfault on this
0x000000000076d7fa <+138>: ud2
There was no earlier error printed though:
LD init/built-in.o
/home/andi/lsrc/linux/drivers/scsi/bfa/bfa_ioc.c: In function
'bfa_ioc_download_fw.constprop':
/home/andi/lsrc/linux/drivers/scsi/bfa/bfa_ioc.c:1871:0: internal compiler
error: Segmentation fault
bfa_ioc_download_fw(struct bfa_ioc_s *ioc, u32 boot_type,
^
Going up the chain the cgraph_edge already has the error mark
(BTW it would be good to clean up the variable names in
redirect_call_stmt_to_callee,
there are two shadowing definitions of "new_stmt")
p *e->call_stmt
$9 = {<gimple_statement_with_memory_ops_base> =
{<gimple_statement_with_ops_base> = {<gimple_statement_base> = {code =
GIMPLE_ERROR_MARK, no_warning = 0, visited = 0, nontemporal_move = 0,
plf = 0, modified = 0, has_volatile_ops = 0, pad = 0, subcode = 0, uid
= 0,
location = 2389971584, num_ops = 11155, bb = 0x2b92fed33c30, next =
0x2b92fed36cb8,
prev = 0x2b92fed36d10}, use_ops = 0x0}, vdef = 0x0, vuse = 0x0},
call_used = {
anything = 0, nonlocal = 0, escaped = 0, ipa_escaped = 0, null = 0,
vars_contains_nonlocal = 1, vars_contains_escaped = 1,
vars_contains_escaped_heap = 1,
vars = 0x2b935340f690}, call_clobbered = {anything = 0, nonlocal = 1,
escaped = 1,
ipa_escaped = 0, null = 0, vars_contains_nonlocal = 0,
vars_contains_escaped = 0,
vars_contains_escaped_heap = 0, vars = 0x280013bba}, u = {fntype =
0x2b92fed33d68,
internal_fn = 4275256680}, op = {0x2b92fed3a1b8}}
Wasn't able to find out how the error mark got into the cgraph without an error.
-Andi