SOURCES: gcc-branch.diff - up from gcc-4_2-branch branch
arekm
arekm at pld-linux.org
Sat Jun 9 12:20:51 CEST 2007
Author: arekm Date: Sat Jun 9 10:20:51 2007 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- up from gcc-4_2-branch branch
---- Files affected:
SOURCES:
gcc-branch.diff (1.3 -> 1.4)
---- Diffs:
================================================================
Index: SOURCES/gcc-branch.diff
diff -u SOURCES/gcc-branch.diff:1.3 SOURCES/gcc-branch.diff:1.4
--- SOURCES/gcc-branch.diff:1.3 Sun Jun 3 14:56:21 2007
+++ SOURCES/gcc-branch.diff Sat Jun 9 12:20:46 2007
@@ -1,7 +1,7 @@
Index: configure
===================================================================
---- configure (.../tags/gcc_4_2_0_release) (revision 125292)
-+++ configure (.../branches/gcc-4_2-branch) (revision 125292)
+--- configure (.../tags/gcc_4_2_0_release) (wersja 125589)
++++ configure (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -7337,6 +7337,12 @@
#line 7338 "configure"
#include "confdefs.h"
@@ -17,8 +17,8 @@
; return 0; }
Index: gcc/tree-vrp.c
===================================================================
---- gcc/tree-vrp.c (.../tags/gcc_4_2_0_release) (revision 125292)
-+++ gcc/tree-vrp.c (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/tree-vrp.c (.../tags/gcc_4_2_0_release) (wersja 125589)
++++ gcc/tree-vrp.c (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -195,7 +195,28 @@
|| operand_equal_p (val, TYPE_MIN_VALUE (TREE_TYPE (val)), 0)));
}
@@ -85,7 +85,18 @@
}
-@@ -1028,6 +1036,8 @@
+@@ -763,7 +771,9 @@
+ if (!TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (val1)))
+ return -2;
+
+- if (strict_overflow_p != NULL)
++ if (strict_overflow_p != NULL
++ && (code1 == SSA_NAME || !TREE_NO_WARNING (val1))
++ && (code2 == SSA_NAME || !TREE_NO_WARNING (val2)))
+ *strict_overflow_p = true;
+
+ if (code1 == SSA_NAME)
+@@ -1028,6 +1038,8 @@
cond_code = swap_tree_comparison (TREE_CODE (cond));
}
@@ -94,7 +105,25 @@
type = TREE_TYPE (limit);
gcc_assert (limit != var);
-@@ -1619,7 +1629,7 @@
+@@ -1167,6 +1179,8 @@
+ {
+ tree one = build_int_cst (type, 1);
+ max = fold_build2 (MINUS_EXPR, type, max, one);
++ if (EXPR_P (max))
++ TREE_NO_WARNING (max) = 1;
+ }
+
+ set_value_range (vr_p, VR_RANGE, min, max, vr_p->equiv);
+@@ -1200,6 +1214,8 @@
+ {
+ tree one = build_int_cst (type, 1);
+ min = fold_build2 (PLUS_EXPR, type, min, one);
++ if (EXPR_P (min))
++ TREE_NO_WARNING (min) = 1;
+ }
+
+ set_value_range (vr_p, VR_RANGE, min, max, vr_p->equiv);
+@@ -1619,7 +1635,7 @@
if (TREE_CODE (op0) == SSA_NAME)
vr0 = *(get_value_range (op0));
else if (is_gimple_min_invariant (op0))
@@ -103,7 +132,7 @@
else
set_value_range_to_varying (&vr0);
-@@ -1627,7 +1637,7 @@
+@@ -1627,7 +1643,7 @@
if (TREE_CODE (op1) == SSA_NAME)
vr1 = *(get_value_range (op1));
else if (is_gimple_min_invariant (op1))
@@ -112,7 +141,7 @@
else
set_value_range_to_varying (&vr1);
-@@ -2006,7 +2016,7 @@
+@@ -2006,7 +2022,7 @@
if (TREE_CODE (op0) == SSA_NAME)
vr0 = *(get_value_range (op0));
else if (is_gimple_min_invariant (op0))
@@ -121,7 +150,7 @@
else
set_value_range_to_varying (&vr0);
-@@ -2393,7 +2403,10 @@
+@@ -2393,7 +2409,10 @@
its type may be different from _Bool. Convert VAL to EXPR's
type. */
val = fold_convert (TREE_TYPE (expr), val);
@@ -133,7 +162,7 @@
}
else
set_value_range_to_varying (vr);
-@@ -2424,7 +2437,7 @@
+@@ -2424,7 +2443,7 @@
else if (TREE_CODE_CLASS (code) == tcc_comparison)
extract_range_from_comparison (vr, expr);
else if (is_gimple_min_invariant (expr))
@@ -142,7 +171,84 @@
else
set_value_range_to_varying (vr);
-@@ -4156,7 +4169,7 @@
+@@ -2545,6 +2564,13 @@
+ if (compare_values (min, max) == 1)
+ return;
+ }
++
++ /* According to the loop information, the variable does not
++ overflow. If we think it does, probably because of an
++ overflow due to arithmetic on a different INF value,
++ reset now. */
++ if (is_negative_overflow_infinity (min))
++ min = tmin;
+ }
+ else
+ {
+@@ -2557,13 +2583,62 @@
+ if (compare_values (min, max) == 1)
+ return;
+ }
++
++ if (is_positive_overflow_infinity (max))
++ max = tmax;
+ }
+
+ set_value_range (vr, VR_RANGE, min, max, vr->equiv);
+ }
+ }
+
++/* Return true if VAR may overflow at STMT. This checks any available
++ loop information to see if we can determine that VAR does not
++ overflow. */
+
++static bool
++vrp_var_may_overflow (tree var, tree stmt)
++{
++ struct loop *l;
++ tree chrec, init, step;
++
++ if (current_loops == NULL)
++ return true;
++
++ l = loop_containing_stmt (stmt);
++ if (l == NULL)
++ return true;
++
++ chrec = instantiate_parameters (l, analyze_scalar_evolution (l, var));
++ if (TREE_CODE (chrec) != POLYNOMIAL_CHREC)
++ return true;
++
++ init = initial_condition_in_loop_num (chrec, l->num);
++ step = evolution_part_in_loop_num (chrec, l->num);
++
++ if (step == NULL_TREE
++ || !is_gimple_min_invariant (step)
++ || !valid_value_p (init))
++ return true;
++
++ /* If we get here, we know something useful about VAR based on the
++ loop information. If it wraps, it may overflow. */
++
++ if (scev_probably_wraps_p (init, step, stmt,
++ current_loops->parray[CHREC_VARIABLE (chrec)],
++ true))
++ return true;
++
++ if (dump_file && (dump_flags & TDF_DETAILS) != 0)
++ {
++ print_generic_expr (dump_file, var, 0);
++ fprintf (dump_file, ": loop information indicates does not overflow\n");
++ }
++
++ return false;
++}
++
++
+ /* Given two numeric value ranges VR0, VR1 and a comparison code COMP:
+
+ - Return BOOLEAN_TRUE_NODE if VR0 COMP VR1 always returns true for
+@@ -4156,7 +4231,7 @@
t = retval = NULL_TREE;
EXECUTE_IF_SET_IN_BITMAP (e2, 0, i2, bi2)
{
@@ -151,17 +257,55 @@
value_range_t vr2 = *(vr_value[i2]);
+@@ -4773,7 +4848,8 @@
+ if (vrp_val_is_max (vr_result.max))
+ goto varying;
+
+- if (!needs_overflow_infinity (TREE_TYPE (vr_result.min)))
++ if (!needs_overflow_infinity (TREE_TYPE (vr_result.min))
++ || !vrp_var_may_overflow (lhs, phi))
+ vr_result.min = TYPE_MIN_VALUE (TREE_TYPE (vr_result.min));
+ else if (supports_overflow_infinity (TREE_TYPE (vr_result.min)))
+ vr_result.min =
+@@ -4791,7 +4867,8 @@
+ if (vrp_val_is_min (vr_result.min))
+ goto varying;
+
+- if (!needs_overflow_infinity (TREE_TYPE (vr_result.max)))
++ if (!needs_overflow_infinity (TREE_TYPE (vr_result.max))
++ || !vrp_var_may_overflow (lhs, phi))
+ vr_result.max = TYPE_MAX_VALUE (TREE_TYPE (vr_result.max));
+ else if (supports_overflow_infinity (TREE_TYPE (vr_result.max)))
+ vr_result.max =
+@@ -4971,6 +5048,8 @@
+ {
+ tree one = build_int_cst (TREE_TYPE (op0), 1);
+ max = fold_build2 (MINUS_EXPR, TREE_TYPE (op0), max, one);
++ if (EXPR_P (max))
++ TREE_NO_WARNING (max) = 1;
+ }
+ }
+ else if (cond_code == GE_EXPR || cond_code == GT_EXPR)
+@@ -4984,6 +5063,8 @@
+ {
+ tree one = build_int_cst (TREE_TYPE (op0), 1);
+ min = fold_build2 (PLUS_EXPR, TREE_TYPE (op0), min, one);
++ if (EXPR_P (min))
++ TREE_NO_WARNING (min) = 1;
+ }
+ }
+
Index: gcc/DATESTAMP
===================================================================
---- gcc/DATESTAMP (.../tags/gcc_4_2_0_release) (revision 125292)
-+++ gcc/DATESTAMP (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/DATESTAMP (.../tags/gcc_4_2_0_release) (wersja 125589)
++++ gcc/DATESTAMP (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -1 +1 @@
-20070514
-+20070603
++20070609
Index: gcc/pointer-set.c
===================================================================
---- gcc/pointer-set.c (.../tags/gcc_4_2_0_release) (revision 125292)
-+++ gcc/pointer-set.c (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/pointer-set.c (.../tags/gcc_4_2_0_release) (wersja 125589)
++++ gcc/pointer-set.c (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -22,13 +22,12 @@
#include "system.h"
#include "pointer-set.h"
@@ -385,8 +529,8 @@
+}
Index: gcc/pointer-set.h
===================================================================
---- gcc/pointer-set.h (.../tags/gcc_4_2_0_release) (revision 125292)
-+++ gcc/pointer-set.h (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/pointer-set.h (.../tags/gcc_4_2_0_release) (wersja 125589)
++++ gcc/pointer-set.h (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -22,11 +22,21 @@
#define POINTER_SET_H
@@ -412,9 +556,50 @@
#endif /* POINTER_SET_H */
Index: gcc/fold-const.c
===================================================================
---- gcc/fold-const.c (.../tags/gcc_4_2_0_release) (revision 125292)
-+++ gcc/fold-const.c (.../branches/gcc-4_2-branch) (revision 125292)
-@@ -12634,9 +12634,14 @@
+--- gcc/fold-const.c (.../tags/gcc_4_2_0_release) (wersja 125589)
++++ gcc/fold-const.c (.../branches/gcc-4_2-branch) (wersja 125589)
+@@ -4450,13 +4450,24 @@
+ {
+ low = range_successor (high1);
+ high = high0;
+- in_p = (low != 0);
++ in_p = 1;
++ if (low == 0)
++ {
++ /* We are in the weird situation where high0 > high1 but
++ high1 has no successor. Punt. */
++ return 0;
++ }
+ }
+ else if (! subset || highequal)
+ {
+ low = low0;
+ high = range_predecessor (low1);
+- in_p = (high != 0);
++ in_p = 1;
++ if (high == 0)
++ {
++ /* low0 < low1 but low1 has no predecessor. Punt. */
++ return 0;
++ }
+ }
+ else
+ return 0;
+@@ -4476,7 +4487,12 @@
+ {
+ low = range_successor (high0);
+ high = high1;
+- in_p = (low != 0);
++ in_p = 1;
++ if (low == 0)
++ {
++ /* high1 > high0 but high0 has no successor. Punt. */
++ return 0;
++ }
+ }
+ }
+
+@@ -12634,9 +12650,14 @@
/* ... fall through ... */
default:
@@ -434,15 +619,42 @@
/* We don't know sign of `t', so be conservative and return false. */
Index: gcc/DEV-PHASE
===================================================================
---- gcc/DEV-PHASE (.../tags/gcc_4_2_0_release) (revision 125292)
-+++ gcc/DEV-PHASE (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/DEV-PHASE (.../tags/gcc_4_2_0_release) (wersja 125589)
++++ gcc/DEV-PHASE (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -0,0 +1 @@
+prerelease
Index: gcc/ChangeLog
===================================================================
---- gcc/ChangeLog (.../tags/gcc_4_2_0_release) (revision 125292)
-+++ gcc/ChangeLog (.../branches/gcc-4_2-branch) (revision 125292)
-@@ -1,3 +1,174 @@
+--- gcc/ChangeLog (.../tags/gcc_4_2_0_release) (wersja 125589)
++++ gcc/ChangeLog (.../branches/gcc-4_2-branch) (wersja 125589)
+@@ -1,3 +1,201 @@
++2007-06-08 Kaz Kojima <kkojima at gcc.gnu.org>
++
++ PR target/32163
++ Backport from mainline.
++ * config/sh/sh.md (symGOT_load): Don't schedule insns when
++ the symbol is generated with the stack protector.
++
++2007-06-06 Ian Lance Taylor <iant at google.com>
++
++ * fold-const.c (merge_ranges): If range_successor or
++ range_predecessor fail, just return 0.
++
++2007-06-05 Ian Lance Taylor <iant at google.com>
++
++ * tree-vrp.c (compare_values_warnv): Check TREE_NO_WARNING on a
++ PLUS_EXPR or MINUS_EXPR node before setting *strict_overflow_p.
++ (extract_range_from_assert): Set TREE_NO_WARNING when creating an
++ expression.
++ (test_for_singularity): Likewise.
++
++2007-06-04 Ian Lance Taylor <iant at google.com>
++
++ * tree-vrp.c (adjust_range_with_scev): When loop is not expected
++ to overflow, reduce overflow infinity to regular infinity.
++ (vrp_var_may_overflow): New static function.
++ (vrp_visit_phi_node): Check vrp_var_may_overflow.
++
+2007-05-31 H.J. Lu <hongjiu.lu at intel.com>
+
+ Backport from mainline:
@@ -617,7 +829,7 @@
2007-05-13 Release Manager
* GCC 4.2.0 released.
-@@ -307,7 +478,8 @@
+@@ -307,7 +505,8 @@
2007-04-03 Stuart Hastings <stuart at apple.com>
PR 31281
@@ -629,8 +841,8 @@
2007-04-03 Jakub Jelinek <jakub at redhat.com>
Index: gcc/testsuite/gcc.c-torture/execute/vrp-7.c
===================================================================
---- gcc/testsuite/gcc.c-torture/execute/vrp-7.c (.../tags/gcc_4_2_0_release) (revision 0)
-+++ gcc/testsuite/gcc.c-torture/execute/vrp-7.c (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/testsuite/gcc.c-torture/execute/vrp-7.c (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.c-torture/execute/vrp-7.c (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -0,0 +1,20 @@
+
+void abort (void);
@@ -654,8 +866,8 @@
+}
Index: gcc/testsuite/gcc.c-torture/execute/20070517-1.c
===================================================================
---- gcc/testsuite/gcc.c-torture/execute/20070517-1.c (.../tags/gcc_4_2_0_release) (revision 0)
-+++ gcc/testsuite/gcc.c-torture/execute/20070517-1.c (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/testsuite/gcc.c-torture/execute/20070517-1.c (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.c-torture/execute/20070517-1.c (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -0,0 +1,41 @@
+/* PR rtl-optimization/31691 */
+/* Origin: Chi-Hua Chen <stephaniechc-gccbug at yahoo.com> */
@@ -700,8 +912,8 @@
+}
Index: gcc/testsuite/gcc.c-torture/compile/pr31953.c
===================================================================
---- gcc/testsuite/gcc.c-torture/compile/pr31953.c (.../tags/gcc_4_2_0_release) (revision 0)
-+++ gcc/testsuite/gcc.c-torture/compile/pr31953.c (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/testsuite/gcc.c-torture/compile/pr31953.c (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.c-torture/compile/pr31953.c (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -0,0 +1,14 @@
+struct WView
+{
@@ -719,8 +931,8 @@
+}
Index: gcc/testsuite/gcc.target/i386/sse2-vec-3.c
===================================================================
---- gcc/testsuite/gcc.target/i386/sse2-vec-3.c (.../tags/gcc_4_2_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/sse2-vec-3.c (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/testsuite/gcc.target/i386/sse2-vec-3.c (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/i386/sse2-vec-3.c (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -0,0 +1,37 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -msse2" } */
@@ -761,8 +973,8 @@
+}
Index: gcc/testsuite/gcc.target/i386/pr31167.c
===================================================================
---- gcc/testsuite/gcc.target/i386/pr31167.c (.../tags/gcc_4_2_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/pr31167.c (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/testsuite/gcc.target/i386/pr31167.c (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/i386/pr31167.c (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -0,0 +1,20 @@
+/* { dg-do compile { target x86_64-*-* } } */
+/* { dg-options "-O" } */
@@ -786,8 +998,8 @@
+}
Index: gcc/testsuite/gcc.target/i386/sse2-vec-4.c
===================================================================
---- gcc/testsuite/gcc.target/i386/sse2-vec-4.c (.../tags/gcc_4_2_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/sse2-vec-4.c (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/testsuite/gcc.target/i386/sse2-vec-4.c (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/i386/sse2-vec-4.c (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -0,0 +1,41 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -msse2" } */
@@ -832,8 +1044,8 @@
+}
Index: gcc/testsuite/gcc.target/i386/sse2-check.h
===================================================================
---- gcc/testsuite/gcc.target/i386/sse2-check.h (.../tags/gcc_4_2_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/sse2-check.h (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/testsuite/gcc.target/i386/sse2-check.h (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/i386/sse2-check.h (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -0,0 +1,20 @@
+#include <stdio.h>
+#include <stdlib.h>
@@ -857,8 +1069,8 @@
+}
Index: gcc/testsuite/gcc.target/i386/sse2-vec-1.c
===================================================================
---- gcc/testsuite/gcc.target/i386/sse2-vec-1.c (.../tags/gcc_4_2_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/sse2-vec-1.c (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/testsuite/gcc.target/i386/sse2-vec-1.c (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/i386/sse2-vec-1.c (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -0,0 +1,35 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -msse2" } */
@@ -897,8 +1109,8 @@
+}
Index: gcc/testsuite/gcc.target/i386/sse2-vec-5.c
===================================================================
---- gcc/testsuite/gcc.target/i386/sse2-vec-5.c (.../tags/gcc_4_2_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/sse2-vec-5.c (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/testsuite/gcc.target/i386/sse2-vec-5.c (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/i386/sse2-vec-5.c (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -0,0 +1,49 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -msse2" } */
@@ -951,8 +1163,8 @@
+}
Index: gcc/testsuite/gcc.target/i386/sse2-vec-2.c
===================================================================
---- gcc/testsuite/gcc.target/i386/sse2-vec-2.c (.../tags/gcc_4_2_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/sse2-vec-2.c (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/testsuite/gcc.target/i386/sse2-vec-2.c (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/i386/sse2-vec-2.c (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -0,0 +1,35 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -msse2" } */
@@ -991,8 +1203,8 @@
+}
Index: gcc/testsuite/gcc.target/i386/sse2-vec-6.c
===================================================================
---- gcc/testsuite/gcc.target/i386/sse2-vec-6.c (.../tags/gcc_4_2_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/sse2-vec-6.c (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/testsuite/gcc.target/i386/sse2-vec-6.c (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/i386/sse2-vec-6.c (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -0,0 +1,69 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -msse2" } */
@@ -1063,11 +1275,78 @@
+ abort ();
+ }
+}
+Index: gcc/testsuite/gcc.dg/Wstrict-overflow-18.c
+===================================================================
+--- gcc/testsuite/gcc.dg/Wstrict-overflow-18.c (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.dg/Wstrict-overflow-18.c (.../branches/gcc-4_2-branch) (wersja 125589)
+@@ -0,0 +1,22 @@
++/* { dg-do compile } */
++/* { dg-options "-fstrict-overflow -O2 -Wstrict-overflow" } */
++
++/* Don't warn about an overflow when folding i > 0. The loop analysis
++ should determine that i does not wrap. */
++
++struct c { unsigned int a; unsigned int b; };
++extern void bar (struct c *);
++int
++foo (struct c *p)
++{
++ int i;
++ int sum = 0;
++
++ for (i = 0; i < p->a - p->b; ++i)
++ {
++ if (i > 0)
++ sum += 2;
++ bar (p);
++ }
++ return sum;
++}
+Index: gcc/testsuite/gcc.dg/Wstrict-overflow-19.c
+===================================================================
+--- gcc/testsuite/gcc.dg/Wstrict-overflow-19.c (.../tags/gcc_4_2_0_release) (wersja 0)
++++ gcc/testsuite/gcc.dg/Wstrict-overflow-19.c (.../branches/gcc-4_2-branch) (wersja 125589)
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-options "-fstrict-overflow -O2 -Wstrict-overflow" } */
++
++/* Don't warn about an overflow when threading jumps. We used to get
++ a warning from comparing bounds generated by VRP. */
++
++int
++bar(int a, int b, int n)
++{
++ if (b > a)
++ n = a - b;
++ if (a >= b)
++ n = 1;
++ return n;
++}
Index: gcc/testsuite/ChangeLog
===================================================================
---- gcc/testsuite/ChangeLog (.../tags/gcc_4_2_0_release) (revision 125292)
-+++ gcc/testsuite/ChangeLog (.../branches/gcc-4_2-branch) (revision 125292)
-@@ -1,3 +1,104 @@
+--- gcc/testsuite/ChangeLog (.../tags/gcc_4_2_0_release) (wersja 125589)
++++ gcc/testsuite/ChangeLog (.../branches/gcc-4_2-branch) (wersja 125589)
+@@ -1,3 +1,124 @@
++2007-06-08 Dirk Mueller <dmueller at suse.de>
++
++ PR c++/31809
++ Backport from mainline:
++ 2007-05-30 Jakub Jelinek <jakub at redhat.com>
++
++ * g++.dg/opt/static5.C: New test.
++
++2007-06-06 Ian Lance Taylor <iant at google.com>
++
++ * g++.dg/conversion/enum1.C: New test.
++
++2007-06-05 Ian Lance Taylor <iant at google.com>
++
++ * gcc.dg/Wstrict-overflow-19.c: New test.
++
++2007-06-04 Ian Lance Taylor <iant at google.com>
++
++ * gcc.dg/Wstrict-overflow-18.c: New test.
++
+2007-05-31 H.J. Lu <hongjiu.lu at intel.com>
+
+ Backport from mainline:
@@ -1174,8 +1453,8 @@
* GCC 4.2.0 released.
Index: gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_bitops.f90
===================================================================
---- gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_bitops.f90 (.../tags/gcc_4_2_0_release) (revision 125292)
-+++ gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_bitops.f90 (.../branches/gcc-4_2-branch) (revision 125292)
+--- gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_bitops.f90 (.../tags/gcc_4_2_0_release) (wersja 125589)
++++ gcc/testsuite/gfortran.fortran-torture/execute/intrinsic_bitops.f90 (.../branches/gcc-4_2-branch) (wersja 125589)
@@ -8,7 +8,8 @@
i = 2
j = 3
@@ -1193,10 +1472,25 @@
+ if (ishftc (a, 1, bit_size(a)) .ne. 10) call abort
+ if (ishftc (1, 1, 32) .ne. 2) call abort
end program
+Index: gcc/testsuite/g++.dg/conversion/enum1.C
<<Diff was trimmed, longer than 597 lines>>
---- CVS-web:
http://cvs.pld-linux.org/SOURCES/gcc-branch.diff?r1=1.3&r2=1.4&f=u
More information about the pld-cvs-commit
mailing list