aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2013-04-03 11:17:44 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2013-04-03 11:17:44 +0200
commit4e7d7b3d5d5cefd5e19a736a83c3077f7c95baad (patch)
treeee1f834718a018ae1e4059bf0a7d4d879d20def1 /gcc/builtins.c
parente6c9d234044bae3de1941cb7d654dc9d3425fd1b (diff)
downloadgcc-4e7d7b3d5d5cefd5e19a736a83c3077f7c95baad.zip
gcc-4e7d7b3d5d5cefd5e19a736a83c3077f7c95baad.tar.gz
gcc-4e7d7b3d5d5cefd5e19a736a83c3077f7c95baad.tar.bz2
re PR c/19449 (__builtin_constant_p cannot resolve to const when optimizing)
PR c/19449 * tree.h (force_folding_builtin_constant_p): New decl. * builtins.c (force_folding_builtin_constant_p): New variable. (fold_builtin_constant_p): Fold immediately also if force_folding_builtin_constant_p. * c-parser.c (c_parser_get_builtin_args): Add choose_expr_p argument. If set, or it temporarily for parsing of the first argument into force_folding_builtin_constant_p. (c_parser_postfix_expression): Adjust callers. * gcc.c-torture/execute/pr19449.c: New test. From-SVN: r197393
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 68b6a2c..efab82e 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -75,6 +75,9 @@ const char * built_in_names[(int) END_BUILTINS] =
initialized to NULL_TREE. */
builtin_info_type builtin_info;
+/* Non-zero if __builtin_constant_p should be folded right away. */
+bool force_folding_builtin_constant_p;
+
static const char *c_getstr (tree);
static rtx c_readstr (const char *, enum machine_mode);
static int target_char_cast (tree, char *);
@@ -6974,7 +6977,8 @@ fold_builtin_constant_p (tree arg)
|| AGGREGATE_TYPE_P (TREE_TYPE (arg))
|| POINTER_TYPE_P (TREE_TYPE (arg))
|| cfun == 0
- || folding_initializer)
+ || folding_initializer
+ || force_folding_builtin_constant_p)
return integer_zero_node;
return NULL_TREE;