> 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.
Well, for small testcases easy way is to use --save-temps --verbose and then restart the failing lto1 invocation with gdb --args For long compilations one can also use gdb's attach but then all the stderr is going into the buffer (I hope we will eventually fix that - now it is not only anoying but it also makes warnings to come out without highlighting) > > 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} Hmm, this indeed looks bogus. My guess is that the statement is removed? If you run it in gdb, you can probably easy watchpoint to see who drops it to GIMPLE_ERROR_MARK. I believe it is just a conicidence it is error mark, because it is gimple code 0. > > 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: Hmm, it should not... > (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. Yep, it looks like someone frogto to update call edge after replacing the statement.... Putting the watchpoint will probably let us know who. Honza