2017-11-15 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.dg / pr53265.c
blobd3ab6aa60317312fefb94296e2b8f67ab7905eb6
1 /* PR tree-optimization/53265 */
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -Wall" } */
4 /* { dg-require-effective-target size32plus } */
6 void bar (void *);
7 int baz (int);
9 void
10 fn1 (void)
12 unsigned int a[128];
13 int i;
15 for (i = 0; i < 128; ++i) /* { dg-message "note: within this loop" } */
16 a[i] = i * 0x02000001; /* { dg-warning "64 invokes undefined behavior" } */
17 bar (a);
20 void
21 fn2 (void)
23 unsigned long long a[128];
24 int i;
26 for (i = 0; i < 128; i++) /* { dg-message "note: within this loop" } */
27 a[i] = (i + 1LL) * 0x0123456789ABCDEFLL; /* { dg-warning "112 invokes undefined behavior" } */
28 bar (a);
31 void
32 fn3 (void)
34 unsigned char a[16], b[16], c[16];
35 int i;
37 bar (b);
38 for (i = 0; i < (int) (sizeof (a) / sizeof (a[0])); i++) /* { dg-message "note: within this loop" } */
40 c[i + 8] = b[i]; /* { dg-warning "8 invokes undefined behavior" } */
41 a[i + 8] = b[i + 8];
43 bar (a);
44 bar (c);
47 void
48 fn4 (void)
50 unsigned int *a[32], *o, i;
52 bar (a);
53 for (i = 0; i <= sizeof (a) / sizeof (a[0]); i++) /* { dg-message "note: within this loop" "" } */
55 o = a[i]; /* { dg-warning "32 invokes undefined behavior" "" } */
56 bar (o);
60 void
61 fn5 (void)
63 unsigned short a[23940];
64 unsigned int b[1140];
65 int j;
67 bar (b);
68 for (j = 0; j < 1140; j++) /* { dg-message "note: within this loop" } */
69 a[23940 + j - 950] = b[j]; /* { dg-warning "950 invokes undefined behavior" } */
70 bar (a);
73 void
74 fn6 (void)
76 double a[4][3], b[12];
77 int i;
78 bar (b);
79 for (i = 0; i < 12; i++) /* { dg-message "note: within this loop" } */
80 a[0][i] = b[i] / 10000.0; /* { dg-warning "3 invokes undefined behavior" } */
81 bar (a);
84 void
85 fn7 (void)
87 int a[16], b, c;
88 bar (a);
89 for (b = a[c = 0]; c < 16; b = a[++c]) /* { dg-warning "15 invokes undefined behavior" "" } */
90 baz (b);
93 /* { dg-message "note: within this loop" "" { target *-*-* } 89 } */
95 const void *va, *vb, *vc, *vd, *ve;
96 const void *vf[4];
97 void
98 fn8 (void)
100 unsigned long i;
101 vf[0] = va; vf[1] = vb; vf[2] = vc; vf[3] = vd;
102 for (i = 0; i < (sizeof (vf) / sizeof (vf[0])); i++)
103 if (!vf[i])
104 vf[i] = ve;
107 int wa, wb[53][5], wc[53][5];
109 void
110 fn9 (void)
112 int i, j, k;
113 for (i = 0; i < 53; i++)
114 for (j = 16 / (((wa & 1) != 0) ? 8 : 4); j > 0; j--)
116 int d = 1;
117 if (wb[i][j] == 0 || wc[i][1] != 0)
118 continue;
119 for (k = 0; k < j; k++)
120 if (wc[i + k][1])
122 d = 0;
123 break;
125 if (!d)
126 continue;
127 wc[i][j] = baz (0);
131 int xa[18];
133 void
134 fn10 (void)
136 int i;
137 for (i = 16; i < 32; i++) /* { dg-message "note: within this loop" } */
138 xa[i] = 26; /* { dg-warning "2 invokes undefined behavior" } */
141 __attribute__((noinline)) static void
142 fn11 (int x)
144 int i = 1;
145 if (x > 1)
147 baz (i);
148 while (++i != x); /* { dg-bogus "invokes undefined behavior" } */
151 void
152 fn12 (void)
154 fn11 (1);
155 fn11 (1);
156 fn11 (1);