summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-ch.c
diff options
context:
space:
mode:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2007-04-24 21:54:22 +0000
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2007-04-24 21:54:22 +0000
commit4dc19db4a0fc768d48e9ff5916417fec81f9f6b1 (patch)
tree827fe6884c4abd4d231c0b0f3655f06aca7da5ca /gcc/tree-ssa-loop-ch.c
parent95f725d2a3d736f886976e1f98e9cbda2b4add9c (diff)
downloadgcc-4dc19db4a0fc768d48e9ff5916417fec81f9f6b1.tar.gz
PR tree-optimization/31602
* tree-ssa-loop-ch.c (copy_loop_headers): Set TREE_NO_WARNING for conditionals in the copied loop header. * tree-cfg.c (fold_cond_expr_cond): Don't issue undefined overflow warnings if TREE_NO_WARNING is set. * doc/invoke.texi (Warning Options): Clarify that -Wstrict-overflow does not warn about loops. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_2-branch@124127 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-loop-ch.c')
-rw-r--r--gcc/tree-ssa-loop-ch.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/gcc/tree-ssa-loop-ch.c b/gcc/tree-ssa-loop-ch.c
index 1663807127a..7ad1695f66f 100644
--- a/gcc/tree-ssa-loop-ch.c
+++ b/gcc/tree-ssa-loop-ch.c
@@ -1,5 +1,5 @@
/* Loop header copying on trees.
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GCC.
@@ -204,6 +204,27 @@ copy_loop_headers (void)
continue;
}
+ /* If the loop has the form "for (i = j; i < j + 10; i++)" then
+ this copying can introduce a case where we rely on undefined
+ signed overflow to eliminate the preheader condition, because
+ we assume that "j < j + 10" is true. We don't want to warn
+ about that case for -Wstrict-overflow, because in general we
+ don't warn about overflow involving loops. Prevent the
+ warning by setting TREE_NO_WARNING. */
+ if (warn_strict_overflow > 0)
+ {
+ unsigned int i;
+
+ for (i = 0; i < n_bbs; ++i)
+ {
+ tree last;
+
+ last = last_stmt (copied_bbs[i]);
+ if (TREE_CODE (last) == COND_EXPR)
+ TREE_NO_WARNING (last) = 1;
+ }
+ }
+
/* Ensure that the latch and the preheader is simple (we know that they
are not now, since there was the loop exit condition. */
loop_split_edge_with (loop_preheader_edge (loop), NULL);