annotate gcc/testsuite/gcc.dg/pr53265.c @ 111:04ced10e8804

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