diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-10-06 16:34:48 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-10-06 16:34:48 +0200 |
commit | e7f9dae09c771b101425e5b1f92b74278c48cb8d (patch) | |
tree | 1eb9825a1426b1f1981f774965457b45a5f0fba4 | |
parent | bc622b2a5ee54492a43a75c4170efefc33690471 (diff) | |
download | gcc-e7f9dae09c771b101425e5b1f92b74278c48cb8d.zip gcc-e7f9dae09c771b101425e5b1f92b74278c48cb8d.tar.gz gcc-e7f9dae09c771b101425e5b1f92b74278c48cb8d.tar.bz2 |
tree.h (avoid_folding_inline_builtin): New prototype.
* tree.h (avoid_folding_inline_builtin): New prototype.
* builtins.c (avoid_folding_inline_builtin): No longer static.
* gimple-fold.c (gimple_fold_builtin): Give up if
avoid_folding_inline_builtin returns true.
From-SVN: r179614
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/builtins.c | 2 | ||||
-rw-r--r-- | gcc/gimple-fold.c | 5 | ||||
-rw-r--r-- | gcc/tree.h | 1 |
4 files changed, 14 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 74b1139..445cf4a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2011-10-06 Jakub Jelinek <jakub@redhat.com> + + * tree.h (avoid_folding_inline_builtin): New prototype. + * builtins.c (avoid_folding_inline_builtin): No longer static. + * gimple-fold.c (gimple_fold_builtin): Give up if + avoid_folding_inline_builtin returns true. + 2011-10-06 Richard Guenther <rguenther@suse.de> * tree-vect-generic.c (vector_element): Look at previous diff --git a/gcc/builtins.c b/gcc/builtins.c index 3055927..8476b0e 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -10360,7 +10360,7 @@ fold_builtin_varargs (location_t loc, tree fndecl, tree exp, been inlined, otherwise e.g. -D_FORTIFY_SOURCE checking might not be performed. */ -static bool +bool avoid_folding_inline_builtin (tree fndecl) { return (DECL_DECLARED_INLINE_P (fndecl) diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index fcfbcc8..b4993fd 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -828,6 +828,11 @@ gimple_fold_builtin (gimple stmt) if (DECL_BUILT_IN_CLASS (callee) == BUILT_IN_MD) return NULL_TREE; + /* Give up for always_inline inline builtins until they are + inlined. */ + if (avoid_folding_inline_builtin (callee)) + return NULL_TREE; + /* If the builtin could not be folded, and it has no argument list, we're done. */ nargs = gimple_call_num_args (stmt); @@ -5352,6 +5352,7 @@ fold_build_pointer_plus_hwi_loc (location_t loc, tree ptr, HOST_WIDE_INT off) fold_build_pointer_plus_hwi_loc (UNKNOWN_LOCATION, p, o) /* In builtins.c */ +extern bool avoid_folding_inline_builtin (tree); extern tree fold_call_expr (location_t, tree, bool); extern tree fold_builtin_fputs (location_t, tree, tree, bool, bool, tree); extern tree fold_builtin_strcpy (location_t, tree, tree, tree, tree); |