Commit 175a31e4 by Richard Biener Committed by Richard Biener

loadpre2.c: Avoid undefined behavior due to uninitialized variables.

2015-11-05  Richard Biener  <rguenther@suse.de>

	* gcc.dg/tree-ssa/loadpre2.c: Avoid undefined behavior due to
	uninitialized variables.
	* gcc.dg/tree-ssa/loadpre21.c: Likewise.
	* gcc.dg/tree-ssa/loadpre22.c: Likewise.
	* gcc.dg/tree-ssa/loadpre23.c: Likewise.
	* gcc.dg/tree-ssa/loadpre24.c: Likewise.
	* gcc.dg/tree-ssa/loadpre25.c: Likewise.
	* gcc.dg/tree-ssa/loadpre4.c: Likewise.
	* gcc.dg/ipa/inlinehint-2.c: Likewise.
	* gcc.dg/ipa/pure-const-2.c: Likewise.
	* gcc.dg/tree-ssa/loop-1.c: Likewise.
	* gcc.dg/tree-ssa/loop-23.c: Likewise.
	* gcc.dg/tree-ssa/pr22051-2.c: Likewise.
	* gcc.dg/tree-ssa/ssa-pre-3.c: Likewise.
	* gcc.dg/tree-ssa/ssa-sccvn-3.c: Likewise.
	* gcc.dg/vect/pr30858.c: Likewise.
	* gcc.dg/vect/pr33866.c: Likewise.
	* gcc.dg/vect/pr37027.c: Likewise.
	* c-c++-common/ubsan/null-10.c: Likewise.
	* gcc.target/i386/incoming-8.c: Likewise.

From-SVN: r229793
parent 7f77442b
2015-11-05 Richard Biener <rguenther@suse.de>
* gcc.dg/tree-ssa/loadpre2.c: Avoid undefined behavior due to
uninitialized variables.
* gcc.dg/tree-ssa/loadpre21.c: Likewise.
* gcc.dg/tree-ssa/loadpre22.c: Likewise.
* gcc.dg/tree-ssa/loadpre23.c: Likewise.
* gcc.dg/tree-ssa/loadpre24.c: Likewise.
* gcc.dg/tree-ssa/loadpre25.c: Likewise.
* gcc.dg/tree-ssa/loadpre4.c: Likewise.
* gcc.dg/ipa/inlinehint-2.c: Likewise.
* gcc.dg/ipa/pure-const-2.c: Likewise.
* gcc.dg/tree-ssa/loop-1.c: Likewise.
* gcc.dg/tree-ssa/loop-23.c: Likewise.
* gcc.dg/tree-ssa/pr22051-2.c: Likewise.
* gcc.dg/tree-ssa/ssa-pre-3.c: Likewise.
* gcc.dg/tree-ssa/ssa-sccvn-3.c: Likewise.
* gcc.dg/vect/pr30858.c: Likewise.
* gcc.dg/vect/pr33866.c: Likewise.
* gcc.dg/vect/pr37027.c: Likewise.
* c-c++-common/ubsan/null-10.c: Likewise.
* gcc.target/i386/incoming-8.c: Likewise.
2015-11-04 Eric Botcazou <ebotcazou@adacore.com> 2015-11-04 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/slice9.adb: New test. * gnat.dg/slice9.adb: New test.
......
...@@ -2,10 +2,12 @@ ...@@ -2,10 +2,12 @@
/* { dg-options "-fsanitize=null -w" } */ /* { dg-options "-fsanitize=null -w" } */
/* { dg-shouldfail "ubsan" } */ /* { dg-shouldfail "ubsan" } */
short x;
int int
main (void) main (void)
{ {
short *p = 0, *u; short *p = 0, *u = &x;
*(u + *p) = 23; *(u + *p) = 23;
return 0; return 0;
} }
......
...@@ -5,7 +5,7 @@ int ...@@ -5,7 +5,7 @@ int
t(int s, void **p) t(int s, void **p)
{ {
int i; int i;
for (i;i<10000;i+=s) for (i=0;i<10000;i+=s)
p[i]=0; p[i]=0;
} }
int int
......
...@@ -5,7 +5,7 @@ int i_am_pure(char *c, int n) ...@@ -5,7 +5,7 @@ int i_am_pure(char *c, int n)
{ {
char *d=__builtin_alloca (n); char *d=__builtin_alloca (n);
int i; int i;
int sum; int sum = 0;
for (i=0;i<n;i++) for (i=0;i<n;i++)
d[i] = c[i]; d[i] = c[i];
for (i=0;i<n;i++) for (i=0;i<n;i++)
......
...@@ -2,16 +2,15 @@ ...@@ -2,16 +2,15 @@
/* { dg-options "-O2 -fdump-tree-pre-stats" } */ /* { dg-options "-O2 -fdump-tree-pre-stats" } */
int main(int *a, int argc) int main(int *a, int argc)
{ {
int b;
int i; int i;
int d, e; int e;
/* Should be able to hoist this out of the loop. */ /* Should be able to hoist this out of the loop. */
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
{ {
e = *a; e = *a;
} }
return d + e; return e;
} }
/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */ /* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
...@@ -3,16 +3,15 @@ ...@@ -3,16 +3,15 @@
typedef int type[2]; typedef int type[2];
int main(type *a, int argc) int main(type *a, int argc)
{ {
int b;
int i; int i;
int d, e; int e;
/* Should be able to hoist this out of the loop. */ /* Should be able to hoist this out of the loop. */
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
{ {
e = (*a)[0]; e = (*a)[0];
} }
return d + e; return e;
} }
/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */ /* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
...@@ -3,16 +3,15 @@ ...@@ -3,16 +3,15 @@
typedef int type[2]; typedef int type[2];
int main(type *a, int argc) int main(type *a, int argc)
{ {
int b;
int i; int i;
int d, e; int e;
/* Should be able to hoist this out of the loop. */ /* Should be able to hoist this out of the loop. */
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
{ {
e = (*a)[argc]; e = (*a)[argc];
} }
return d + e; return e;
} }
/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */ /* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
...@@ -8,17 +8,16 @@ struct { ...@@ -8,17 +8,16 @@ struct {
int foo(int argc) int foo(int argc)
{ {
int b;
int c; int c;
int i; int i;
int d, e; int e;
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
{ {
e = x.a; e = x.a;
x.a = 9; x.a = 9;
} }
return d + e; return e;
} }
/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */ /* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */
...@@ -5,17 +5,15 @@ int a; ...@@ -5,17 +5,15 @@ int a;
int foo(int argc) int foo(int argc)
{ {
int b;
int c;
int i; int i;
int d, e; int e;
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
{ {
e = a; e = a;
a = 9; a = 9;
} }
return d + e; return e;
} }
/* We will move the load of a out of the loop. */ /* We will move the load of a out of the loop. */
......
...@@ -3,17 +3,15 @@ ...@@ -3,17 +3,15 @@
struct X { int i; }; struct X { int i; };
int foo(struct X *a, int argc) int foo(struct X *a, int argc)
{ {
int b;
int c;
int i; int i;
int d, e; int e;
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
{ {
e = a->i; e = a->i;
a->i = 9; a->i = 9;
} }
return d + e; return e;
} }
/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */ /* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */
...@@ -2,17 +2,15 @@ ...@@ -2,17 +2,15 @@
/* { dg-options "-O2 -fdump-tree-pre-stats" } */ /* { dg-options "-O2 -fdump-tree-pre-stats" } */
int main(int *a, int argc) int main(int *a, int argc)
{ {
int b;
int c;
int i; int i;
int d, e; int e;
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
{ {
e = *a; e = *a;
*a = 9; *a = 9;
} }
return d + e; return e;
} }
/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */ /* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */
...@@ -24,7 +24,7 @@ int foo (int x); ...@@ -24,7 +24,7 @@ int foo (int x);
int xxx(void) int xxx(void)
{ {
int x = 45; int x = 45;
int sum; int sum = 0;
while (x >>= 1) while (x >>= 1)
sum += foo (x) * 2; sum += foo (x) * 2;
......
...@@ -7,7 +7,7 @@ int bla(int); ...@@ -7,7 +7,7 @@ int bla(int);
int foo(void) int foo(void)
{ {
int i; int i;
int sum; int sum = 0;
/* This loop used to appear to be too large for unrolling. */ /* This loop used to appear to be too large for unrolling. */
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized -w" } */ /* { dg-options "-O2 -fdump-tree-optimized -w" } */
void *arf (); void *arf ();
int int
foo() foo(void (*q)(void))
{ {
void (*q)(void);
int r = q; int r = q;
if (r != 0) if (r != 0)
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-pre-stats" } */ /* { dg-options "-O2 -fdump-tree-pre-stats" } */
unsigned foo1 (unsigned a, unsigned b) unsigned foo1 (unsigned a, unsigned b, unsigned j, unsigned k)
{ {
unsigned i, j, k; unsigned i;
for (i = 0; i != a; i++) for (i = 0; i != a; i++)
{ {
j += 4*b; j += 4*b;
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-fre1-stats" } */ /* { dg-options "-O2 -fdump-tree-fre1" } */
int *p;
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int *p;
int result; int result;
*p = 2; *p = 2;
if (argc) if (argc)
...@@ -11,4 +11,4 @@ int main(int argc, char **argv) ...@@ -11,4 +11,4 @@ int main(int argc, char **argv)
return result; return result;
} }
/* We should eliminate result = *p by saying it has the value 2. */ /* We should eliminate result = *p by saying it has the value 2. */
/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "fre1"} } */ /* { dg-final { scan-tree-dump "return 2;" "fre1"} } */
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
int int
foo (int ko) foo (int ko)
{ {
int j,i; int j,i = 0;
for (j = 0; j < ko; j++) for (j = 0; j < ko; j++)
i += (i > 10) ? -5 : 7; i += (i > 10) ? -5 : 7;
return i; return i;
......
...@@ -18,7 +18,7 @@ void test_select_fill_hyper_simple (long *offset) ...@@ -18,7 +18,7 @@ void test_select_fill_hyper_simple (long *offset)
fill_iter_info iter_info; fill_iter_info iter_info;
int i, j; int i, j;
iter_info.coords = (long *) points; iter_info.coords = (long *) points;
for (i = 0, num_points = 0; j < (int) start[1]; j++, num_points++) for (j = i = 0, num_points = 0; j < (int) start[1]; j++, num_points++)
{ {
points[num_points][0] = i + start[0]; points[num_points][0] = i + start[0];
points[num_points][1] = j + start[1]; points[num_points][1] = j + start[1];
......
...@@ -18,8 +18,8 @@ void ...@@ -18,8 +18,8 @@ void
foo (void) foo (void)
{ {
int i; int i;
int sum1; int sum1 = 0;
int sum2; int sum2 = 0;
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
{ {
......
...@@ -6,7 +6,7 @@ float ...@@ -6,7 +6,7 @@ float
foo (float f) foo (float f)
{ {
float array[128]; float array[128];
float x; float x = 0.;
int i; int i;
for (i = 0; i < sizeof(array) / sizeof(*array); i++) for (i = 0; i < sizeof(array) / sizeof(*array); i++)
array[i] = f; array[i] = f;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment