diff options
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r-- | gcc/tree-inline.c | 22 |
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)) |