From 0bfd099c35ab5e03bb51dcd237ba5fb82b500b86 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 12 Oct 2016 14:37:53 +0000 Subject: re PR debug/77947 (ICE with -g and -O2 in strip_naming_typedef) 2016-10-12 Richard Biener PR debug/77947 * cgraphunit.c (analyze_functions): Preserve cgraph nodes function context. * g++.dg/torture/pr77947.C: New testcase. From-SVN: r241053 --- gcc/cgraphunit.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'gcc/cgraphunit.c') diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index abcb35d..4fa518d 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -1117,15 +1117,22 @@ analyze_functions (bool first_time) } /* If decl is a clone of an abstract function, - mark that abstract function so that we don't release its body. - The DECL_INITIAL() of that abstract function declaration - will be later needed to output debug info. */ + mark that abstract function so that we don't release its body. + The DECL_INITIAL() of that abstract function declaration + will be later needed to output debug info. */ if (DECL_ABSTRACT_ORIGIN (decl)) { cgraph_node *origin_node = cgraph_node::get_create (DECL_ABSTRACT_ORIGIN (decl)); origin_node->used_as_abstract_origin = true; } + /* Preserve a functions function context node. It will + later be needed to output debug info. */ + if (tree fn = decl_function_context (decl)) + { + cgraph_node *origin_node = cgraph_node::get_create (fn); + enqueue_node (origin_node); + } } else { -- cgit v1.1