diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2019-08-13 21:35:10 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2019-08-13 21:35:10 +0000 |
commit | cb1180d547e3b28547134a06ee020163afa59cc3 (patch) | |
tree | 27381416159b7f256dd96a13ec9d99d1db40c29d /gcc/tree-ssa-ccp.c | |
parent | 0b1fe8cf6f1dde656c505dde6d27279dff388962 (diff) | |
download | gcc-cb1180d547e3b28547134a06ee020163afa59cc3.zip gcc-cb1180d547e3b28547134a06ee020163afa59cc3.tar.gz gcc-cb1180d547e3b28547134a06ee020163afa59cc3.tar.bz2 |
Protect some checks of DECL_FUNCTION_CODE
This patch protects various uses of DECL_FUNCTION_CODE that didn't
obviously check for BUILT_IN_NORMAL first (either directly or in callers).
They could therefore trigger for functions that either aren't built-ins
or are a different kind of built-in.
Also, the patch removes a redundant GIMPLE_CALL check from
optimize_stdarg_builtin, since it gave the impression that the stmt
was less well checked than it actually is.
2019-08-13 Richard Sandiford <richard.sandiford@arm.com>
gcc/
PR middle-end/91421
* attribs.c (decl_attributes): Check the DECL_BUILT_IN_CLASS
before the DECL_FUNCTION_CODE.
* calls.c (maybe_warn_alloc_args_overflow): Use fndecl_built_in_p
to check for a BUILT_IN_ALLOCA call.
* ipa-cp.c (ipa_get_indirect_edge_target_1): Likewise for
BUILT_IN_UNREACHABLE. Don't check for a FUNCTION_TYPE.
* ipa-devirt.c (possible_polymorphic_call_target_p): Likewise.
* ipa-prop.c (try_make_edge_direct_virtual_call): Likewise.
* gimple-ssa-isolate-paths.c (is_addr_local): Check specifically
for BUILT_IN_NORMAL functions.
* trans-mem.c (expand_block_edges): Use gimple_call_builtin_p to
test for BUILT_IN_TM_ABORT.
* tree-ssa-ccp.c (optimize_stack_restore): Use fndecl_built_in_p
to check for a BUILT_IN_STACK_RESTORE call.
(optimize_stdarg_builtin): Remove redundant check for GIMPLE_CALL.
* tree-ssa-threadedge.c
(record_temporary_equivalences_from_stmts_at_dest): Check for a
BUILT_IN_NORMAL decl before checking its DECL_FUNCTION_CODE.
* tree-vect-patterns.c (vect_recog_pow_pattern): Use a positive
test for a BUILT_IN_NORMAL call instead of a negative test for
an internal function call.
gcc/c/
PR middle-end/91421
* c-decl.c (header_for_builtin_fn): Take a FUNCTION_DECL instead
of a built_in_function.
(diagnose_mismatched_decls, implicitly_declare): Update accordingly.
From-SVN: r274403
Diffstat (limited to 'gcc/tree-ssa-ccp.c')
-rw-r--r-- | gcc/tree-ssa-ccp.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index f25e6c8..458b218 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -2598,7 +2598,7 @@ optimize_stack_restore (gimple_stmt_iterator i) || ALLOCA_FUNCTION_CODE_P (DECL_FUNCTION_CODE (callee))) return NULL_TREE; - if (DECL_FUNCTION_CODE (callee) == BUILT_IN_STACK_RESTORE) + if (fndecl_built_in_p (callee, BUILT_IN_STACK_RESTORE)) goto second_stack_restore; } @@ -2657,9 +2657,6 @@ optimize_stdarg_builtin (gimple *call) bool va_list_simple_ptr; location_t loc = gimple_location (call); - if (gimple_code (call) != GIMPLE_CALL) - return NULL_TREE; - callee = gimple_call_fndecl (call); cfun_va_list = targetm.fn_abi_va_list (callee); |