@@ -159,10 +159,13 @@ template<typename E> class OptionSet {
159
159
StorageType m_storage { 0 };
160
160
};
161
161
162
+ int atoi (const char * str);
163
+
162
164
class Number {
163
165
public:
164
166
Number (int v) : v(v) { }
165
167
Number (double );
168
+ Number (const char * str) : v(atoi(str)) { }
166
169
Number operator +(const Number&);
167
170
Number& operator ++() { ++v; return *this ; }
168
171
Number operator ++(int ) { Number returnValue (v); ++v; return returnValue; }
@@ -173,9 +176,16 @@ class Number {
173
176
int v;
174
177
};
175
178
179
+ class DerivedNumber : public Number {
180
+ public:
181
+ DerivedNumber (char c) : Number(c - ' 0' ) { }
182
+ DerivedNumber (const char * str) : Number(atoi(str)) { }
183
+ };
184
+
176
185
class ComplexNumber {
177
186
public:
178
187
ComplexNumber () : realPart(0 ), complexPart(0 ) { }
188
+ ComplexNumber (int real, const char * str) : realPart(real), complexPart(str) { }
179
189
ComplexNumber (const ComplexNumber&);
180
190
ComplexNumber& operator ++() { realPart.someMethod (); return *this ; }
181
191
ComplexNumber operator ++(int );
@@ -311,6 +321,7 @@ class RefCounted {
311
321
return ;
312
322
}
313
323
unsigned trivial60 () { return ObjectWithNonTrivialDestructor { 5 }.value (); }
324
+ unsigned trivial61 () { return DerivedNumber (' 7' ).value (); }
314
325
315
326
static RefCounted& singleton () {
316
327
static RefCounted s_RefCounted;
@@ -391,6 +402,9 @@ class RefCounted {
391
402
ComplexNumber nonTrivial18 () { return +complex; }
392
403
ComplexNumber* nonTrivial19 () { return new ComplexNumber (complex); }
393
404
unsigned nonTrivial20 () { return ObjectWithMutatingDestructor { 7 }.value (); }
405
+ unsigned nonTrivial21 () { return Number (" 123" ).value (); }
406
+ unsigned nonTrivial22 () { return ComplexNumber (123 , " 456" ).real ().value (); }
407
+ unsigned nonTrivial23 () { return DerivedNumber (" 123" ).value (); }
394
408
395
409
static unsigned s_v;
396
410
unsigned v { 0 };
@@ -479,6 +493,7 @@ class UnrelatedClass {
479
493
getFieldTrivial ().trivial58 (); // no-warning
480
494
getFieldTrivial ().trivial59 (); // no-warning
481
495
getFieldTrivial ().trivial60 (); // no-warning
496
+ getFieldTrivial ().trivial61 (); // no-warning
482
497
483
498
RefCounted::singleton ().trivial18 (); // no-warning
484
499
RefCounted::singleton ().someFunction (); // no-warning
@@ -525,6 +540,12 @@ class UnrelatedClass {
525
540
// expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}}
526
541
getFieldTrivial ().nonTrivial20 ();
527
542
// expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}}
543
+ getFieldTrivial ().nonTrivial21 ();
544
+ // expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}}
545
+ getFieldTrivial ().nonTrivial22 ();
546
+ // expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}}
547
+ getFieldTrivial ().nonTrivial23 ();
548
+ // expected-warning@-1{{Call argument for 'this' parameter is uncounted and unsafe}}
528
549
}
529
550
};
530
551
0 commit comments