@@ -26,7 +26,6 @@ void test() {
26
26
a + a++; // cxx11-warning {{unsequenced modification and access to 'a'}}
27
27
// cxx17-warning@-1 {{unsequenced modification and access to 'a'}}
28
28
a = a++; // cxx11-warning {{multiple unsequenced modifications to 'a'}}
29
- // TODO cxx17-warning@-1 {{multiple unsequenced modifications to 'a'}}
30
29
++ ++a; // ok
31
30
(a++, a++); // ok
32
31
++a + ++a; // cxx11-warning {{multiple unsequenced modifications to 'a'}}
@@ -36,13 +35,10 @@ void test() {
36
35
(a++, a) = 0 ; // ok, increment is sequenced before value computation of LHS
37
36
a = xs[++a]; // ok
38
37
a = xs[a++]; // cxx11-warning {{multiple unsequenced modifications to 'a'}}
39
- // TODO cxx17-warning@-1 {{multiple unsequenced modifications to 'a'}}
40
38
(a ? xs[0 ] : xs[1 ]) = ++a; // cxx11-warning {{unsequenced modification and access to 'a'}}
41
- // TODO cxx17-warning@-1 {{unsequenced modification and access to 'a'}}
42
39
a = (++a, ++a); // ok
43
40
a = (a++, ++a); // ok
44
41
a = (a++, a++); // cxx11-warning {{multiple unsequenced modifications to 'a'}}
45
- // TODO cxx17-warning@-1 {{multiple unsequenced modifications to 'a'}}
46
42
f (a, a); // ok
47
43
f (a = 0 , a); // cxx11-warning {{unsequenced modification and access to 'a'}}
48
44
// cxx17-warning@-1 {{unsequenced modification and access to 'a'}}
@@ -61,7 +57,6 @@ void test() {
61
57
(++a, a) += 1 ; // ok
62
58
a = ++a; // ok
63
59
a += ++a; // cxx11-warning {{unsequenced modification and access to 'a'}}
64
- // TODO cxx17-warning@-1 {{unsequenced modification and access to 'a'}}
65
60
66
61
A agg1 = { a++, a++ }; // ok
67
62
A agg2 = { a++ + a, a++ }; // cxx11-warning {{unsequenced modification and access to 'a'}}
@@ -77,7 +72,6 @@ void test() {
77
72
a = S { ++a, a++ }.n ; // ok
78
73
A { ++a, a++ }.x ; // ok
79
74
a = A { ++a, a++ }.x ; // cxx11-warning {{multiple unsequenced modifications to 'a'}}
80
- // TODO cxx17-warning@-1 {{multiple unsequenced modifications to 'a'}}
81
75
A { ++a, a++ }.x + A { ++a, a++ }.y ; // cxx11-warning {{multiple unsequenced modifications to 'a'}}
82
76
// cxx17-warning@-1 {{multiple unsequenced modifications to 'a'}}
83
77
@@ -112,14 +106,10 @@ void test() {
112
106
a += (a++, a) + a; // cxx11-warning {{unsequenced modification and access to 'a'}}
113
107
// cxx17-warning@-1 {{unsequenced modification and access to 'a'}}
114
108
115
- int *p = xs;
116
- a = *(a++, p); // ok
117
109
a = a++ && a; // ok
118
- p[(long long unsigned )(p = 0 )]; // cxx11-warning {{unsequenced modification and access to 'p'}}
119
110
120
111
A *q = &agg1;
121
112
(q = &agg2)->y = q->x ; // cxx11-warning {{unsequenced modification and access to 'q'}}
122
- // TODO cxx17-warning@-1 {{unsequenced modification and access to 'q'}}
123
113
124
114
// This has undefined behavior if a == 0; otherwise, the side-effect of the
125
115
// increment is sequenced before the value computation of 'f(a, a)', which is
@@ -147,20 +137,14 @@ void test() {
147
137
xs[8 ] ? ++a : a++; // no-warning
148
138
xs[8 ] ? a+=1 : a+= 2 ; // no-warning
149
139
(xs[8 ] ? a+=1 : a+= 2 ) = a; // cxx11-warning {{unsequenced modification and access to 'a'}}
150
- // TODO cxx17-warning@-1 {{unsequenced modification and access to 'a'}}
151
140
(xs[8 ] ? a+=1 : a) = a; // cxx11-warning {{unsequenced modification and access to 'a'}}
152
- // TODO cxx17-warning@-1 {{unsequenced modification and access to 'a'}}
153
141
(xs[8 ] ? a : a+= 2 ) = a; // cxx11-warning {{unsequenced modification and access to 'a'}}
154
- // TODO cxx17-warning@-1 {{unsequenced modification and access to 'a'}}
155
142
a = (xs[8 ] ? a+=1 : a+= 2 ); // no-warning
156
143
a += (xs[8 ] ? a+=1 : a+= 2 ); // cxx11-warning {{unsequenced modification and access to 'a'}}
157
- // TODO cxx17-warning@-1 {{unsequenced modification and access to 'a'}}
158
144
159
145
(false ? a+=1 : a) = a; // no-warning
160
146
(true ? a+=1 : a) = a; // cxx11-warning {{unsequenced modification and access to 'a'}}
161
- // TODO cxx17-warning@-1 {{unsequenced modification and access to 'a'}}
162
147
(false ? a : a+=2 ) = a; // cxx11-warning {{unsequenced modification and access to 'a'}}
163
- // TODO cxx17-warning@-1 {{unsequenced modification and access to 'a'}}
164
148
(true ? a : a+=2 ) = a; // no-warning
165
149
166
150
xs[8 ] && (++a + a++); // cxx11-warning {{multiple unsequenced modifications to 'a'}}
@@ -180,19 +164,15 @@ void test() {
180
164
a = ((a++, false ) || (a++, false ) || (a++, false ) || (a++, false )); // no-warning
181
165
a = ((a++, true ) && (a++, true ) && (a++, true ) && (a++, true )); // no-warning
182
166
a = ((a++, false ) || (a++, false ) || (a++, false ) || a++); // cxx11-warning {{multiple unsequenced modifications to 'a'}}
183
- // TODO cxx17-warning@-1 {{multiple unsequenced modifications to 'a'}}
184
167
a = ((a++, true ) && (a++, true ) && (a++, true ) && a++); // cxx11-warning {{multiple unsequenced modifications to 'a'}}
185
- // TODO cxx17-warning@-1 {{multiple unsequenced modifications to 'a'}}
186
168
a = ((a++, false ) || (a++, false ) || (a++, false ) || (a + a, false )); // no-warning
187
169
a = ((a++, true ) && (a++, true ) && (a++, true ) && (a + a, true )); // no-warning
188
170
189
171
a = (false && a++); // no-warning
190
172
a = (true && a++); // cxx11-warning {{multiple unsequenced modifications to 'a'}}
191
- // TODO cxx17-warning@-1 {{multiple unsequenced modifications to 'a'}}
192
173
a = (true && ++a); // no-warning
193
174
a = (true || a++); // no-warning
194
175
a = (false || a++); // cxx11-warning {{multiple unsequenced modifications to 'a'}}
195
- // TODO cxx17-warning@-1 {{multiple unsequenced modifications to 'a'}}
196
176
a = (false || ++a); // no-warning
197
177
198
178
(a++) | (a++); // cxx11-warning {{multiple unsequenced modifications to 'a'}}
@@ -207,6 +187,75 @@ void test() {
207
187
(__builtin_object_size (&(++a, a), 0 ) ? 1 : 0 ) + ++a; // ok
208
188
(__builtin_expect (++a, 0 ) ? 1 : 0 ) + ++a; // cxx11-warning {{multiple unsequenced modifications to 'a'}}
209
189
// cxx17-warning@-1 {{multiple unsequenced modifications to 'a'}}
190
+
191
+
192
+ int *p = xs;
193
+ a = *(a++, p); // no-warning
194
+ p[(long long unsigned )(p = 0 )]; // cxx11-warning {{unsequenced modification and access to 'p'}}
195
+ (i++, xs)[i++]; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
196
+ (++i, xs)[++i]; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
197
+ (i, xs)[++i + ++i]; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
198
+ // cxx17-warning@-1 {{multiple unsequenced modifications to 'i'}}
199
+ p++[p == xs]; // cxx11-warning {{unsequenced modification and access to 'p'}}
200
+ ++p[p++ == xs]; // cxx11-warning {{unsequenced modification and access to 'p'}}
201
+
202
+ struct S { int x; } s, *ps = &s;
203
+ int (S::*PtrMem);
204
+ (PtrMem = &S::x ,s).*(PtrMem); // cxx11-warning {{unsequenced modification and access to 'PtrMem'}}
205
+ (PtrMem = &S::x ,s).*(PtrMem = &S::x); // cxx11-warning {{multiple unsequenced modifications to 'PtrMem'}}
206
+ (PtrMem = &S::x ,ps)->*(PtrMem); // cxx11-warning {{unsequenced modification and access to 'PtrMem'}}
207
+ (PtrMem = &S::x ,ps)->*(PtrMem = &S::x); // cxx11-warning {{multiple unsequenced modifications to 'PtrMem'}}
208
+ (PtrMem = nullptr ) == (PtrMem = nullptr ); // cxx11-warning {{multiple unsequenced modifications to 'PtrMem'}}
209
+ // cxx17-warning@-1 {{multiple unsequenced modifications to 'PtrMem'}}
210
+ (PtrMem = nullptr ) == PtrMem; // cxx11-warning {{unsequenced modification and access to 'PtrMem'}}
211
+ // cxx17-warning@-1 {{unsequenced modification and access to 'PtrMem'}}
212
+
213
+ i++ << i++; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
214
+ ++i << ++i; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
215
+ i++ << i; // cxx11-warning {{unsequenced modification and access to 'i'}}
216
+ i << i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
217
+ i++ >> i++; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
218
+ ++i >> ++i; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
219
+ i++ >> i; // cxx11-warning {{unsequenced modification and access to 'i'}}
220
+ i >> i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
221
+ (i++ << i) + i; // cxx11-warning {{unsequenced modification and access to 'i'}}
222
+ // cxx17-warning@-1 {{unsequenced modification and access to 'i'}}
223
+ (i++ << i) << i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
224
+
225
+ ++i = i++; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
226
+ i = i+= 1 ; // no-warning
227
+ i = i++ + ++i; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
228
+ // cxx17-warning@-1 {{multiple unsequenced modifications to 'i'}}
229
+ ++i += ++i; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
230
+ ++i += i++; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
231
+ (i++, i) += ++i; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
232
+ (i++, i) += i++; // cxx11-warning {{multiple unsequenced modifications to 'i'}}
233
+ i += i+= 1 ; // cxx11-warning {{unsequenced modification and access to 'i'}}
234
+ i += i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
235
+ i += ++i; // cxx11-warning {{unsequenced modification and access to 'i'}}
236
+ i -= i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
237
+ i -= ++i; // cxx11-warning {{unsequenced modification and access to 'i'}}
238
+ i *= i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
239
+ i *= ++i; // cxx11-warning {{unsequenced modification and access to 'i'}}
240
+ i /= i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
241
+ i /= ++i; // cxx11-warning {{unsequenced modification and access to 'i'}}
242
+ i %= i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
243
+ i %= ++i; // cxx11-warning {{unsequenced modification and access to 'i'}}
244
+ i ^= i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
245
+ i ^= ++i; // cxx11-warning {{unsequenced modification and access to 'i'}}
246
+ i |= i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
247
+ i |= ++i; // cxx11-warning {{unsequenced modification and access to 'i'}}
248
+ i &= i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
249
+ i &= ++i; // cxx11-warning {{unsequenced modification and access to 'i'}}
250
+ i <<= i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
251
+ i <<= ++i; // cxx11-warning {{unsequenced modification and access to 'i'}}
252
+ i >>= i++; // cxx11-warning {{unsequenced modification and access to 'i'}}
253
+ i >>= ++i; // cxx11-warning {{unsequenced modification and access to 'i'}}
254
+
255
+ p[i++] = i; // cxx11-warning {{unsequenced modification and access to 'i'}}
256
+ p[i++] = (i = 42 ); // cxx11-warning {{multiple unsequenced modifications to 'i'}}
257
+ p++[i++] = (i = p ? i++ : i++); // cxx11-warning {{unsequenced modification and access to 'p'}}
258
+ // cxx11-warning@-1 {{multiple unsequenced modifications to 'i'}}
210
259
}
211
260
212
261
namespace members {
0 commit comments