Commit a1a0fd4e by Alexandre Oliva Committed by Alexandre Oliva

tree.c (get_callee_fndecl): Move DECL_ABSTRACT_ORIGIN-following...

* tree.c (get_callee_fndecl): Move DECL_ABSTRACT_ORIGIN-following...
* tree-inline.c (expand_call_inline): ... here.

From-SVN: r47725
parent 441f30d9
2001-12-06 Alexandre Oliva <aoliva@redhat.com>
* tree.c (get_callee_fndecl): Move DECL_ABSTRACT_ORIGIN-following...
* tree-inline.c (expand_call_inline): ... here.
2001-12-06 H.J. Lu <hjl@gnu.org>
* Makefile.in (.po.gmo): Use "-mkdir po" for parallel build.
......
......@@ -807,6 +807,18 @@ expand_call_inline (tp, walk_subtrees, data)
if (!fn)
return NULL_TREE;
/* 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);
/* Don't try to inline functions that are not well-suited to
inlining. */
if (!inlinable_function_p (fn, id))
......
......@@ -4382,23 +4382,7 @@ get_callee_fndecl (call)
that `f' is being called. */
if (TREE_CODE (addr) == ADDR_EXPR
&& TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
{
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;
}
return TREE_OPERAND (addr, 0);
/* We couldn't figure out what was being called. */
return NULL_TREE;
......
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