This should fix PR54837, LTO is not yet prepared for debug source stmts. The following moves checking code that triggers to a place where it hopefully does not trigger.
LTO bootstrap is broken in other ways though :( Will commit after non-LTO bootstrap finished to make progress. Richard. 2012-10-09 Richard Guenther <rguent...@suse.de> PR middle-end/54837 * cfgexpand.c (expand_debug_source_expr): Move checking code conditional on a found decl_debug_args vector. Index: gcc/cfgexpand.c =================================================================== --- gcc/cfgexpand.c (revision 192253) +++ gcc/cfgexpand.c (working copy) @@ -3521,25 +3521,23 @@ expand_debug_source_expr (tree exp) && !DECL_INCOMING_RTL (exp) && DECL_ABSTRACT_ORIGIN (current_function_decl)) { - tree aexp = exp; - if (DECL_ABSTRACT_ORIGIN (exp)) - aexp = DECL_ABSTRACT_ORIGIN (exp); + tree aexp = DECL_ORIGIN (exp); if (DECL_CONTEXT (aexp) == DECL_ABSTRACT_ORIGIN (current_function_decl)) { VEC(tree, gc) **debug_args; unsigned int ix; tree ddecl; -#ifdef ENABLE_CHECKING - tree parm; - for (parm = DECL_ARGUMENTS (current_function_decl); - parm; parm = DECL_CHAIN (parm)) - gcc_assert (parm != exp - && DECL_ABSTRACT_ORIGIN (parm) != aexp); -#endif debug_args = decl_debug_args_lookup (current_function_decl); if (debug_args != NULL) { +#ifdef ENABLE_CHECKING + tree parm; + for (parm = DECL_ARGUMENTS (current_function_decl); + parm; parm = DECL_CHAIN (parm)) + gcc_assert (parm != exp + && DECL_ABSTRACT_ORIGIN (parm) != aexp); +#endif for (ix = 0; VEC_iterate (tree, *debug_args, ix, ddecl); ix += 2) if (ddecl == aexp)