diff options
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r-- | gcc/tree-cfg.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index e3e2134..7d28aa9 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -408,10 +408,18 @@ fold_cond_expr_cond (void) if (stmt && TREE_CODE (stmt) == COND_EXPR) { - tree cond = fold (COND_EXPR_COND (stmt)); - if (integer_zerop (cond)) + tree cond; + bool zerop, onep; + + fold_defer_overflow_warnings (); + cond = fold (COND_EXPR_COND (stmt)); + zerop = integer_zerop (cond); + onep = integer_onep (cond); + fold_undefer_overflow_warnings (zerop || onep, stmt, + WARN_STRICT_OVERFLOW_CONDITIONAL); + if (zerop) COND_EXPR_COND (stmt) = boolean_false_node; - else if (integer_onep (cond)) + else if (onep) COND_EXPR_COND (stmt) = boolean_true_node; } } |