@@ -138,11 +138,29 @@ class Number {
138
138
Number (int v) : v(v) { }
139
139
Number (double );
140
140
Number operator +(const Number&);
141
+ Number& operator ++() { ++v; return *this ; }
142
+ Number operator ++(int ) { Number returnValue (v); ++v; return returnValue; }
141
143
const int & value () const { return v; }
144
+ void someMethod ();
145
+
142
146
private:
143
147
int v;
144
148
};
145
149
150
+ class ComplexNumber {
151
+ public:
152
+ ComplexNumber () : real(0 ), complex(0 ) { }
153
+ ComplexNumber (const ComplexNumber&);
154
+ ComplexNumber& operator ++() { real.someMethod (); return *this ; }
155
+ ComplexNumber operator ++(int );
156
+ ComplexNumber& operator <<(int );
157
+ ComplexNumber& operator +();
158
+
159
+ private:
160
+ Number real;
161
+ Number complex;
162
+ };
163
+
146
164
class RefCounted {
147
165
public:
148
166
void ref () const ;
@@ -210,6 +228,12 @@ class RefCounted {
210
228
unsigned trivial32 () { return sizeof (int ); }
211
229
unsigned trivial33 () { return ~0xff ; }
212
230
template <unsigned v> unsigned trivial34 () { return v; }
231
+ void trivial35 () { v++; }
232
+ void trivial36 () { ++(*number); }
233
+ void trivial37 () { (*number)++; }
234
+ void trivial38 () { v++; if (__builtin_expect (!!(number), 1 )) (*number)++; }
235
+ int trivial39 () { return -v; }
236
+ int trivial40 () { return v << 2 ; }
213
237
214
238
static RefCounted& singleton () {
215
239
static RefCounted s_RefCounted;
@@ -284,9 +308,14 @@ class RefCounted {
284
308
285
309
int nonTrivial13 () { return ~otherFunction (); }
286
310
int nonTrivial14 () { int r = 0xff ; r |= otherFunction (); return r; }
311
+ void nonTrivial15 () { ++complex; }
312
+ void nonTrivial16 () { complex++; }
313
+ ComplexNumber nonTrivial17 () { return complex << 2 ; }
314
+ ComplexNumber nonTrivial18 () { return +complex; }
287
315
288
316
unsigned v { 0 };
289
317
Number* number { nullptr };
318
+ ComplexNumber complex;
290
319
Enum enumValue { Enum::Value1 };
291
320
};
292
321
@@ -342,6 +371,12 @@ class UnrelatedClass {
342
371
getFieldTrivial ().trivial32 (); // no-warning
343
372
getFieldTrivial ().trivial33 (); // no-warning
344
373
getFieldTrivial ().trivial34 <7 >(); // no-warning
374
+ getFieldTrivial ().trivial35 (); // no-warning
375
+ getFieldTrivial ().trivial36 (); // no-warning
376
+ getFieldTrivial ().trivial37 (); // no-warning
377
+ getFieldTrivial ().trivial38 (); // no-warning
378
+ getFieldTrivial ().trivial39 (); // no-warning
379
+ getFieldTrivial ().trivial40 (); // no-warning
345
380
346
381
RefCounted::singleton ().trivial18 (); // no-warning
347
382
RefCounted::singleton ().someFunction (); // no-warning
@@ -376,6 +411,14 @@ class UnrelatedClass {
376
411
// expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}}
377
412
getFieldTrivial ().nonTrivial14 ();
378
413
// expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}}
414
+ getFieldTrivial ().nonTrivial15 ();
415
+ // expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}}
416
+ getFieldTrivial ().nonTrivial16 ();
417
+ // expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}}
418
+ getFieldTrivial ().nonTrivial17 ();
419
+ // expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}}
420
+ getFieldTrivial ().nonTrivial18 ();
421
+ // expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}}
379
422
}
380
423
};
381
424
0 commit comments