From a1a0fd4e18b29805534aa56e3910202395a792c3 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Thu, 6 Dec 2001 17:58:23 +0000 Subject: 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 --- gcc/tree-inline.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'gcc/tree-inline.c') diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 1444edf10ea..6cd1fbb5e15 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -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)) -- cgit v1.2.1