diff options
author | Dodji Seketeli <dodji@redhat.com> | 2008-11-12 21:57:44 +0000 |
---|---|---|
committer | Dodji Seketeli <dodji@gcc.gnu.org> | 2008-11-12 22:57:44 +0100 |
commit | 6b20f353f6c35385c5e473672ed373e4470df908 (patch) | |
tree | 4bc0a17b6a59171e39ad721b6863cf81bef60b30 /gcc/cgraph.c | |
parent | ac12508218a55bb3a9973b2f57ecea0003e995e3 (diff) | |
download | gcc-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/cgraph.c')
-rw-r--r-- | gcc/cgraph.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 73dbfb3..43659cb 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -936,7 +936,11 @@ cgraph_release_function_body (struct cgraph_node *node) DECL_STRUCT_FUNCTION (node->decl) = NULL; } DECL_SAVED_TREE (node->decl) = NULL; - DECL_INITIAL (node->decl) = error_mark_node; + /* If the node is abstract and needed, then do not clear DECL_INITIAL + of its associated function function declaration because it's + needed to emit debug info later. */ + if (!node->abstract_and_needed) + DECL_INITIAL (node->decl) = error_mark_node; } /* Remove the node from cgraph. */ |