http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56297
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2013-02-12 CC| |hubicka at gcc dot gnu.org AssignedTo|unassigned at gcc dot |rguenth at gcc dot gnu.org |gnu.org | Ever Confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> 2013-02-12 13:39:15 UTC --- Confirmed. We put register int i asm ("esp"); into the LTO symbol table. Oops. The GCC symtab and the partition contains (gdb) call debug_symtab_node (node) *esp/0 (*esp) @0x7ffff6e1a068 Type: variable Visibility: force_output public References: Referring: main/1 (read) Availability: overwritable Varpool flags: analyzed finalized not sure if we want to put global hardregs into the symtab at all ... (certainly not in the LTO symbol table we feed to the linker). Thus, maybe Index: gcc/lto-streamer-out.c =================================================================== --- gcc/lto-streamer-out.c (revision 195973) +++ gcc/lto-streamer-out.c (working copy) @@ -1166,7 +1166,8 @@ write_symbol (struct streamer_tree_cache if (!TREE_PUBLIC (t) || is_builtin_fn (t) || DECL_ABSTRACT (t) - || TREE_CODE (t) == RESULT_DECL) + || TREE_CODE (t) == RESULT_DECL + || (TREE_CODE (t) == VAR_DECL && DECL_HARD_REGISTER (t))) return; gcc_assert (TREE_CODE (t) == VAR_DECL ? At least it "works" with that change. Testing it.