aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-inline.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r--gcc/tree-inline.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 5b5e775..77b7baf 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -895,7 +895,12 @@ static tree
find_alloca_call (exp)
tree exp;
{
- return walk_tree (&exp, find_alloca_call_1, NULL, NULL);
+ int line = lineno;
+ const char *file = input_filename;
+ tree ret = walk_tree (&exp, find_alloca_call_1, NULL, NULL);
+ lineno = line;
+ input_filename = file;
+ return ret;
}
static tree
@@ -921,7 +926,12 @@ static tree
find_builtin_longjmp_call (exp)
tree exp;
{
- return walk_tree (&exp, find_builtin_longjmp_call_1, NULL, NULL);
+ int line = lineno;
+ const char *file = input_filename;
+ tree ret = walk_tree (&exp, find_builtin_longjmp_call_1, NULL, NULL);
+ lineno = line;
+ input_filename = file;
+ return ret;
}
/* Returns nonzero if FN is a function that can be inlined into the
@@ -942,6 +952,11 @@ inlinable_function_p (fn, id)
if (DECL_UNINLINABLE (fn))
return 0;
+ /* Check this now so that we instantiate C++ templates before reading
+ DECL_NUM_STMTS. */
+ if ((*lang_hooks.tree_inlining.cannot_inline_tree_fn) (&fn))
+ return 0;
+
/* Assume it is not inlinable. */
inlinable = 0;
@@ -1022,9 +1037,6 @@ inlinable_function_p (fn, id)
}
}
- if (inlinable && (*lang_hooks.tree_inlining.cannot_inline_tree_fn) (&fn))
- inlinable = 0;
-
/* If we don't have the function body available, we can't inline
it. */
if (! DECL_SAVED_TREE (fn))