diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-04-03 11:17:44 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-04-03 11:17:44 +0200 |
commit | 4e7d7b3d5d5cefd5e19a736a83c3077f7c95baad (patch) | |
tree | ee1f834718a018ae1e4059bf0a7d4d879d20def1 /gcc/builtins.c | |
parent | e6c9d234044bae3de1941cb7d654dc9d3425fd1b (diff) | |
download | gcc-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.c | 6 |
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; |