111
|
1 /* PR tree-optimization/53265 */
|
|
2 /* { dg-do compile } */
|
|
3 /* { dg-options "-O2 -Wall" } */
|
|
4 /* { dg-require-effective-target size32plus } */
|
|
5
|
|
6 void bar (void *);
|
|
7 int baz (int);
|
|
8
|
|
9 void
|
|
10 fn1 (void)
|
|
11 {
|
|
12 unsigned int a[128];
|
|
13 int i;
|
|
14
|
|
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);
|
|
18 }
|
|
19
|
|
20 void
|
|
21 fn2 (void)
|
|
22 {
|
|
23 unsigned long long a[128];
|
|
24 int i;
|
|
25
|
|
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);
|
|
29 }
|
|
30
|
|
31 void
|
|
32 fn3 (void)
|
|
33 {
|
|
34 unsigned char a[16], b[16], c[16];
|
|
35 int i;
|
|
36
|
|
37 bar (b);
|
|
38 for (i = 0; i < (int) (sizeof (a) / sizeof (a[0])); i++) /* { dg-message "note: within this loop" } */
|
|
39 {
|
|
40 c[i + 8] = b[i]; /* { dg-warning "8 invokes undefined behavior" } */
|
|
41 a[i + 8] = b[i + 8];
|
|
42 }
|
|
43 bar (a);
|
|
44 bar (c);
|
|
45 }
|
|
46
|
|
47 void
|
|
48 fn4 (void)
|
|
49 {
|
|
50 unsigned int *a[32], *o, i;
|
|
51
|
|
52 bar (a);
|
|
53 for (i = 0; i <= sizeof (a) / sizeof (a[0]); i++) /* { dg-message "note: within this loop" } */
|
|
54 {
|
|
55 o = a[i]; /* { dg-warning "32 invokes undefined behavior" } */
|
|
56 bar (o);
|
|
57 }
|
|
58 }
|
|
59
|
|
60 void
|
|
61 fn5 (void)
|
|
62 {
|
|
63 unsigned short a[23940];
|
|
64 unsigned int b[1140];
|
|
65 int j;
|
|
66
|
|
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);
|
|
71 }
|
|
72
|
|
73 void
|
|
74 fn6 (void)
|
|
75 {
|
|
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);
|
|
82 }
|
|
83
|
|
84 void
|
|
85 fn7 (void)
|
|
86 {
|
|
87 int a[16], b, c;
|
|
88 bar (a);
|
|
89 for (b = a[c = 0]; c < 16; b = a[++c])
|
|
90 /* { dg-warning "15 invokes undefined behavior" "" { target *-*-* } .-1 } */
|
|
91 /* { dg-message "note: within this loop" "" { target *-*-* } .-2 } */
|
|
92 baz (b);
|
|
93 }
|
|
94
|
|
95
|
|
96 const void *va, *vb, *vc, *vd, *ve;
|
|
97 const void *vf[4];
|
|
98 void
|
|
99 fn8 (void)
|
|
100 {
|
|
101 unsigned long i;
|
|
102 vf[0] = va; vf[1] = vb; vf[2] = vc; vf[3] = vd;
|
|
103 for (i = 0; i < (sizeof (vf) / sizeof (vf[0])); i++)
|
|
104 if (!vf[i])
|
|
105 vf[i] = ve;
|
|
106 }
|
|
107
|
|
108 int wa, wb[53][5], wc[53][5];
|
|
109
|
|
110 void
|
|
111 fn9 (void)
|
|
112 {
|
|
113 int i, j, k;
|
|
114 for (i = 0; i < 53; i++)
|
|
115 for (j = 16 / (((wa & 1) != 0) ? 8 : 4); j > 0; j--)
|
|
116 {
|
|
117 int d = 1;
|
|
118 if (wb[i][j] == 0 || wc[i][1] != 0)
|
|
119 continue;
|
|
120 for (k = 0; k < j; k++)
|
|
121 if (wc[i + k][1])
|
|
122 {
|
|
123 d = 0;
|
|
124 break;
|
|
125 }
|
|
126 if (!d)
|
|
127 continue;
|
|
128 wc[i][j] = baz (0);
|
|
129 }
|
|
130 }
|
|
131
|
|
132 int xa[18];
|
|
133
|
|
134 void
|
|
135 fn10 (void)
|
|
136 {
|
|
137 int i;
|
|
138 for (i = 16; i < 32; i++) /* { dg-message "note: within this loop" } */
|
|
139 xa[i] = 26; /* { dg-warning "2 invokes undefined behavior" } */
|
|
140 }
|
|
141
|
|
142 __attribute__((noinline)) static void
|
|
143 fn11 (int x)
|
|
144 {
|
|
145 int i = 1;
|
|
146 if (x > 1)
|
|
147 do
|
|
148 baz (i);
|
|
149 while (++i != x); /* { dg-bogus "invokes undefined behavior" } */
|
|
150 }
|
|
151
|
|
152 void
|
|
153 fn12 (void)
|
|
154 {
|
|
155 fn11 (1);
|
|
156 fn11 (1);
|
|
157 fn11 (1);
|
|
158 }
|