On Fri, Apr 08, 2011 at 01:58:14PM -0400, Jason Merrill wrote: > On 04/05/2011 10:19 AM, Jakub Jelinek wrote: > >i686-linux LTO bootstrap currently fails, because in one partition > >we emit .Ldebug_info0 label twice. The problem is that > >resolve_addr for call_site support attempts to force_decl_die external > >function decls, and at least with LTO that in turn can attempt > >to create new type DIEs, in this case an enumeration with context_die > >being NULL. Unfortunately the code to add proper parents to limbo nodes > >is done right before resolve_addr (and should be done there, so that > >resolve_addr reaches all the needed DIEs). > > > >+/* Traverse the limbo die list, and add parent/child links. The only > >+ dies without parents that should be here are concrete instances of > >+ inline functions, and the comp_unit_die. We can ignore the > >comp_unit_die. > >+ For concrete instances, we can get the parent die from the abstract > >+ instance. */ > > Sounds like this comment needs to be updated if there can be types > on the list as well.
On a closer look, this seems to be because LTO messes up types terribly, struct cpp_options's lang field doesn't have enum c_lang type, but enum prec whose TYPE_CONTEXT is c_parser_binary_expression function from c_parser.c. So when trying to create DIE for cpp_options and stuff in it we end up with the surprising limbo die. Therefore, I'm withdrawing my patch and will look into this mess on Monday. Jakub