+2007-02-13 Ian Lance Taylor <iant@google.com>
+
+ * common.opt: Add Wstrict-overflow and Wstrict-overflow=.
+ * flags.h (warn_strict_overflow): Declare.
+ (enum warn_strict_overflow_code): Define.
+ (issue_strict_overflow_warning): New static inline function.
+ * opts.c (warn_strict_overflow): New variable.
+ (common_handle_option): Handle OPT_Wstrict_overflow and
+ OPT_Wstrict_overflow_.
+ * c-opts.c (c_common_handle_option): Set warn_strict_overflow for
+ OPT_Wall.
+ * fold-const.c: Include intl.h.
+ (fold_deferring_overflow_warnings): New static variable.
+ (fold_deferred_overflow_warning): New static variable.
+ (fold_deferred_overflow_code): New static variable.
+ (fold_defer_overflow_warnings): New function.
+ (fold_undefer_overflow_warnings): New function.
+ (fold_undefer_and_ignore_overflow_warnings): New function.
+ (fold_deferring_overflow_warnings_p): New function.
+ (fold_overflow_warning): New static function.
+ (make_range): Add strict_overflow_p parameter. Change all
+ callers.
+ (extract_muldiv, extract_muldiv_1): Likewise.
+ (fold_unary) [ABS_EXPR]: Check ABS_EXPR before calling
+ tree_expr_nonnegative_p.
+ (fold_negate_expr): Call fold_overflow_warning.
+ (fold_range_test): Likewise.
+ (fold_comparison): Likewise.
+ (fold_binary): Likewise. Call tree_expr_nonnegative_warnv_p
+ instead of tree_expr_nonnegative_p.
+ (tree_expr_nonnegative_warnv_p): Rename from
+ tree_expr_nonnegative_p, add strict_overflow_p parameter.
+ (tree_expr_nonnegative_p): New function.
+ (tree_expr_nonzero_warnv_p): Rename from tree_expr_nonzero_p, add
+ strict_overflow_p parameter.
+ (tree_expr_nonzero_p): New function.
+ * passes.c (verify_interpass_invariants): New static function.
+ (execute_one_pass): Call it.
+ * tree-ssa-loop-niter.c (expand_simple_operations): Ignore fold
+ warnings.
+ (number_of_iterations_exit, loop_niter_by_eval): Likewise.
+ (estimate_numbers_of_iterations): Likewise.
+ (scev_probably_wraps_p): Likewise.
+ * tree-ssa-ccp.c: Include "toplev.h".
+ (evaluate_stmt): Defer fold overflow warnings until we know we are
+ going to optimize.
+ (struct fold_stmt_r_data): Add stmt field.
+ (fold_stmt_r): Defer fold overflow warnings until we know we
+ optimized.
+ (fold_stmt): Initialize stmt field of fold_stmt_r_data.
+ (fold_stmt_inplace): Likewise.
+ * tree-cfgcleanup.c: Include "toplev.h" rather than "errors.h".
+ (cleanup_control_expr_graph): Defer fold overflow warnings until
+ we know we are going to optimize.
+ * tree-cfg.c (fold_cond_expr_cond): Likewise.
+ * tree-ssa-threadedge.c (simplify_control_stmt_condition):
+ Likewise.
+ * tree-vrp.c (vrp_expr_computes_nonnegative): Call
+ tree_expr_nonnegative_warnv_p instead of tree_expr_nonnegative_p.
+ * tree-ssa-loop-manip.c (create_iv): Likewise.
+ * c-typeck.c (build_conditional_expr): Likewise.
+ (build_binary_op): Likewise.
+ * tree-vrp.c (vrp_expr_computes_nonzero): Call
+ tree_expr_nonzero_warnv_p instead of tree_expr_nonzero_p.
+ (extract_range_from_unary_expr): Likewise.
+ * simplify-rtx.c (simplify_const_relational_operation): Warn when
+ assuming that signed overflow does not occur.
+ * c-common.c (pointer_int_sum): Ignore fold overflow warnings.
+ * tree.h (tree_expr_nonnegative_warnv_p): Declare.
+ (fold_defer_overflow_warnings): Declare.
+ (fold_undefer_overflow_warnings): Declare.
+ (fold_undefer_and_ignore_overflow_warnings): Declare.
+ (fold_deferring_overflow_warnings_p): Declare.
+ (tree_expr_nonzero_warnv_p): Declare.
+ * doc/invoke.texi (Option Summary): Add -Wstrict-overflow to list
+ of warning options.
+ (Warning Options): Document -Wstrict-overflow.
+ * Makefile.in (tree-ssa-threadedge.o): Depend on toplev.h.
+ (tree-ssa-ccp.o): Likewise.
+ (tree-cfgcleanup.o): Change errors.h dependency to toplev.h.
+ (fold-const.o): Depend on intl.h.
+
2007-02-13 Ian Lance Taylor <iant@google.com>
PR middle-end/30751