This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/50644] ICE in set_is_used added today
- From: "matz at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 31 Oct 2011 13:16:49 +0000
- Subject: [Bug tree-optimization/50644] ICE in set_is_used added today
- Auto-submitted: auto-generated
- References: <bug-50644-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50644
--- Comment #17 from Michael Matz <matz at gcc dot gnu.org> 2011-10-31 13:16:49 UTC ---
Thank you very much! This really helps and at least reveals something quite
strange with LTO. It falls over the __func__ member of one of the two
static initializers:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000b757b0 in set_is_used (var=0x7ffff527b320)
at ../../gcc/gcc/tree-flow-inline.h:562
562 ann->used = true;
(gdb) p debug_generic_expr (var)
__func__
(gdb) up
...
#4 0x0000000000b77d7e in mark_all_vars_used (expr_p=0x7ffff527b2d0,
data=0x1a823f0) at ../../gcc/gcc/tree-ssa-live.c:595
595 walk_tree (expr_p, mark_all_vars_used_1, data, NULL);
(gdb) p debug_generic_expr (*expr_p)
{.modname="", .function=&__func__, .filename="", .format=151B, .enabled=0}
So it walks the one with 'format=151', i.e. the one from
check_tsc_sync_source. The strange this is:
(gdb) p debug_generic_expr (current_function_decl)
native_cpu_up
Huh? These two functions have no relation with each other. This static
initializer shouldn't be reached while dealing with native_cpu_up.
And indeed (from remove_unused_locals):
(gdb) p debug_tree (var)
<var_decl 0x7ffff527b280 descriptor
...
context <function_decl 0x7ffff539ff00 check_tsc_sync_source>
initial <constructor 0x7ffff5391738>>
So, we have this local static in the cfun->local_decls list, which is
just wrong.