aboutsummaryrefslogtreecommitdiff
path: root/gcc/c
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2015-11-19 22:04:00 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2015-11-19 22:04:00 +0000
commit433068ccab80943a0b1dac0fff62d0cfc5c50acb (patch)
tree6ace05e2fa0c95d7ed9650e5d002ddcb7016f842 /gcc/c
parent09b574dda9435d300108fa98e1f5afd873ee9001 (diff)
downloadgcc-433068ccab80943a0b1dac0fff62d0cfc5c50acb.zip
gcc-433068ccab80943a0b1dac0fff62d0cfc5c50acb.tar.gz
gcc-433068ccab80943a0b1dac0fff62d0cfc5c50acb.tar.bz2
re PR c/68412 (ICE with -Wall -Wextra in fold_binary_loc())
PR c/68412 * c-typeck.c (parser_build_binary_op): Properly handle C_MAYBE_CONST_EXPR before calling warn_tautological_cmp. * gcc.dg/pr68412-2.c: New test. * gcc.dg/pr68412.c: New test. From-SVN: r230627
Diffstat (limited to 'gcc/c')
-rw-r--r--gcc/c/ChangeLog6
-rw-r--r--gcc/c/c-typeck.c23
2 files changed, 28 insertions, 1 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index b561fa0..a0cab87 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,9 @@
+2015-11-19 Marek Polacek <polacek@redhat.com>
+
+ PR c/68412
+ * c-typeck.c (parser_build_binary_op): Properly handle
+ C_MAYBE_CONST_EXPR before calling warn_tautological_cmp.
+
2015-11-17 David Malcolm <dmalcolm@redhat.com>
* c-parser.c (set_c_expr_source_range): Bulletproof both
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index c18c307..5cb0f7e 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -3512,7 +3512,28 @@ parser_build_binary_op (location_t location, enum tree_code code,
code1, arg1.value, code2, arg2.value);
if (warn_tautological_compare)
- warn_tautological_cmp (location, code, arg1.value, arg2.value);
+ {
+ tree lhs = arg1.value;
+ tree rhs = arg2.value;
+ if (TREE_CODE (lhs) == C_MAYBE_CONST_EXPR)
+ {
+ if (C_MAYBE_CONST_EXPR_PRE (lhs) != NULL_TREE
+ && TREE_SIDE_EFFECTS (C_MAYBE_CONST_EXPR_PRE (lhs)))
+ lhs = NULL_TREE;
+ else
+ lhs = C_MAYBE_CONST_EXPR_EXPR (lhs);
+ }
+ if (TREE_CODE (rhs) == C_MAYBE_CONST_EXPR)
+ {
+ if (C_MAYBE_CONST_EXPR_PRE (rhs) != NULL_TREE
+ && TREE_SIDE_EFFECTS (C_MAYBE_CONST_EXPR_PRE (rhs)))
+ rhs = NULL_TREE;
+ else
+ rhs = C_MAYBE_CONST_EXPR_EXPR (rhs);
+ }
+ if (lhs != NULL_TREE && rhs != NULL_TREE)
+ warn_tautological_cmp (location, code, lhs, rhs);
+ }
if (warn_logical_not_paren
&& TREE_CODE_CLASS (code) == tcc_comparison