diff options
author | dodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-11-12 21:57:44 +0000 |
---|---|---|
committer | dodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-11-12 21:57:44 +0000 |
commit | d544ceffc24295ad47cd31bb662767b86a3b7708 (patch) | |
tree | 4bc0a17b6a59171e39ad721b6863cf81bef60b30 /gcc/cgraphunit.c | |
parent | 545b3be58794f25f30fe15e60ab56b6c6c50aa7b (diff) | |
download | gcc-d544ceffc24295ad47cd31bb662767b86a3b7708.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141807 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cgraphunit.c')
-rw-r--r-- | gcc/cgraphunit.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 7c845733327..cd58c2aae0b 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, |