Commit be1bb2a4 by Alexandre Oliva Committed by Alexandre Oliva

tree.c (get_callee_fndecl): Only use DECL_ABSTRACT_ORIGIN if it has DECL_SAVED_TREE.

* tree.c (get_callee_fndecl): Only use DECL_ABSTRACT_ORIGIN if
it has DECL_SAVED_TREE.

From-SVN: r47615
parent 0839863c
2001-12-04 Alexandre Oliva <aoliva@redhat.com>
* tree.c (get_callee_fndecl): Only use DECL_ABSTRACT_ORIGIN if
it has DECL_SAVED_TREE.
* c-decl.c (duplicate_decls): Revert rth's patch. If newdecl
is in a different binding level, get its abstract origin to be
olddecl.
......
......@@ -4379,12 +4379,21 @@ get_callee_fndecl (call)
if (TREE_CODE (addr) == ADDR_EXPR
&& TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
{
addr = TREE_OPERAND (addr, 0);
if (! DECL_INITIAL (addr) && DECL_ABSTRACT_ORIGIN (addr))
addr = DECL_ABSTRACT_ORIGIN (addr);
return addr;
tree fn = TREE_OPERAND (addr, 0);
/* If fn is a declaration of a function in a nested scope that
was globally declared inline, we don't set its DECL_INITIAL.
However, we can't blindly follow DECL_ABSTRACT_ORIGIN because
the C++ front-end uses it for cdtors to refer to their
internal declarations, that are not real functions.
Fortunately those don't have trees to be saved, so we can tell by
checking their DECL_SAVED_TREE. */
if (! DECL_INITIAL (fn)
&& DECL_ABSTRACT_ORIGIN (fn)
&& DECL_SAVED_TREE (DECL_ABSTRACT_ORIGIN (fn)))
fn = DECL_ABSTRACT_ORIGIN (fn);
return fn;
}
/* We couldn't figure out what was being called. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment