aboutsummaryrefslogtreecommitdiff
path: root/gcc/cgraphunit.c
diff options
context:
space:
mode:
authorDodji Seketeli <dodji@redhat.com>2008-11-12 21:57:44 +0000
committerDodji Seketeli <dodji@gcc.gnu.org>2008-11-12 22:57:44 +0100
commit6b20f353f6c35385c5e473672ed373e4470df908 (patch)
tree4bc0a17b6a59171e39ad721b6863cf81bef60b30 /gcc/cgraphunit.c
parentac12508218a55bb3a9973b2f57ecea0003e995e3 (diff)
downloadgcc-6b20f353f6c35385c5e473672ed373e4470df908.zip
gcc-6b20f353f6c35385c5e473672ed373e4470df908.tar.gz
gcc-6b20f353f6c35385c5e473672ed373e4470df908.tar.bz2
re PR debug/27574 (MIssing debug info at -O0 for a local variable in a C++ constructor)
gcc/ChangeLog: 2008-11-12 Dodji Seketeli <dodji@redhat.com> PR debug/27574 * cgraph.h: New abstract_and_needed member to struct cgraph_node. * cgraphunit.c (cgraph_analyze_functions): Flag abstract functions - which clones are reachable - as "abstract and needed". * cgraph.c (cgraph_release_function_body): If a node is "abstract and needed", do not release its DECL_INITIAL() content because that will be needed to emit debug info. gcc/testsuite/ChangeLog: 2008-11-12 Dodji Seketeli <dodji@redhat.com> PR debug/27574 * g++.dg/debug/dwarf2/local-var-in-contructor.C: New test. From-SVN: r141807
Diffstat (limited to 'gcc/cgraphunit.c')
-rw-r--r--gcc/cgraphunit.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 7c84573..cd58c2a 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -896,6 +896,15 @@ cgraph_analyze_functions (void)
if (!edge->callee->reachable)
cgraph_mark_reachable_node (edge->callee);
+ /* 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. */
+ if (DECL_ABSTRACT_ORIGIN (decl))
+ {
+ struct cgraph_node *origin_node = cgraph_node (DECL_ABSTRACT_ORIGIN (decl));
+ origin_node->abstract_and_needed = true;
+ }
+
/* We finalize local static variables during constructing callgraph
edges. Process their attributes too. */
process_function_and_variable_attributes (first_processed,