diff options
author | Jan Hubicka <jh@suse.cz> | 2002-11-18 20:30:34 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2002-11-18 19:30:34 +0000 |
commit | c986baf631d89169f339f1d23014e62614d2e93e (patch) | |
tree | b27ad2e3073c9b341aab81f1ef722dd6924c452c /gcc/calls.c | |
parent | 5602b49d692730366a6e554b52fefa604459d136 (diff) | |
download | gcc-c986baf631d89169f339f1d23014e62614d2e93e.zip gcc-c986baf631d89169f339f1d23014e62614d2e93e.tar.gz gcc-c986baf631d89169f339f1d23014e62614d2e93e.tar.bz2 |
calls.c (alloca_call_p): New global function.
* calls.c (alloca_call_p): New global function.
* tree.h (alloca_call_p): New.
* tree-inline.c (inlinable_function_p): Do not inline when
function calls alloca.
(find_alloca_call, find_alloca_call_1): New functions.
From-SVN: r59228
Diffstat (limited to 'gcc/calls.c')
-rw-r--r-- | gcc/calls.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/calls.c b/gcc/calls.c index f2f9c57..99722b5 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -801,6 +801,21 @@ setjmp_call_p (fndecl) return special_function_p (fndecl, 0) & ECF_RETURNS_TWICE; } +/* Return true when exp contains alloca call. */ +bool +alloca_call_p (exp) + tree exp; +{ + if (TREE_CODE (exp) == CALL_EXPR + && TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR + && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) + == FUNCTION_DECL) + && (special_function_p (TREE_OPERAND (TREE_OPERAND (exp, 0), 0), + 0) & ECF_MAY_BE_ALLOCA)) + return true; + return false; +} + /* Detect flags (function attributes) from the function decl or type node. */ static int |