@@ -7,6 +7,9 @@ void WTFBreakpointTrap();
7
7
void WTFCrashWithInfo (int , const char *, const char *, int );
8
8
void WTFReportAssertionFailure (const char * file, int line, const char * function, const char * assertion);
9
9
10
+ void WTFCrash (void );
11
+ void WTFCrashWithSecurityImplication (void );
12
+
10
13
inline void compilerFenceForCrash ()
11
14
{
12
15
asm volatile (" " ::: " memory" );
@@ -62,14 +65,25 @@ void WTFCrashWithInfo(int line, const char* file, const char* function, int coun
62
65
template <typename ToType, typename FromType>
63
66
ToType bitwise_cast (FromType from);
64
67
68
+ namespace std {
69
+
65
70
template <typename T>
66
71
T* addressof (T& arg);
67
72
73
+ template <typename T>
74
+ T&& forward(T& arg);
75
+
76
+ template <typename T>
77
+ T&& move( T&& t );
78
+
79
+ } // namespace std
80
+
68
81
bool isMainThread ();
69
82
bool isMainThreadOrGCThread ();
70
83
bool isMainRunLoop ();
71
84
bool isWebThread ();
72
85
bool isUIThread ();
86
+ bool mayBeGCThread ();
73
87
74
88
enum class Flags : unsigned short {
75
89
Flag1 = 1 << 0 ,
@@ -161,16 +175,30 @@ class Number {
161
175
162
176
class ComplexNumber {
163
177
public:
164
- ComplexNumber () : real (0 ), complex (0 ) { }
178
+ ComplexNumber () : realPart (0 ), complexPart (0 ) { }
165
179
ComplexNumber (const ComplexNumber&);
166
- ComplexNumber& operator ++() { real .someMethod (); return *this ; }
180
+ ComplexNumber& operator ++() { realPart .someMethod (); return *this ; }
167
181
ComplexNumber operator ++(int );
168
182
ComplexNumber& operator <<(int );
169
183
ComplexNumber& operator +();
170
184
185
+ const Number& real () const { return realPart; }
186
+
171
187
private:
172
- Number real;
173
- Number complex;
188
+ Number realPart;
189
+ Number complexPart;
190
+ };
191
+
192
+ class ObjectWithNonTrivialDestructor {
193
+ public:
194
+ ObjectWithNonTrivialDestructor () { }
195
+ ObjectWithNonTrivialDestructor (unsigned v) : v(v) { }
196
+ ~ObjectWithNonTrivialDestructor () { }
197
+
198
+ unsigned value () const { return v; }
199
+
200
+ private:
201
+ unsigned v { 0 };
174
202
};
175
203
176
204
class RefCounted {
@@ -248,14 +276,29 @@ class RefCounted {
248
276
int trivial40 () { return v << 2 ; }
249
277
unsigned trivial41 () { v = ++s_v; return v; }
250
278
unsigned trivial42 () { return bitwise_cast<unsigned long >(nullptr ); }
251
- Number* trivial43 () { return addressof (*number); }
279
+ Number* trivial43 () { return std:: addressof (*number); }
252
280
Number* trivial44 () { return new Number (1 ); }
253
281
ComplexNumber* trivial45 () { return new ComplexNumber (); }
254
282
void trivial46 () { ASSERT (isMainThread ()); }
255
283
void trivial47 () { ASSERT (isMainThreadOrGCThread ()); }
256
284
void trivial48 () { ASSERT (isMainRunLoop ()); }
257
285
void trivial49 () { ASSERT (isWebThread ()); }
258
286
void trivial50 () { ASSERT (isUIThread ()); }
287
+ void trivial51 () { ASSERT (mayBeGCThread ()); }
288
+ void trivial52 () { WTFCrash (); }
289
+ void trivial53 () { WTFCrashWithSecurityImplication (); }
290
+ unsigned trivial54 () { return ComplexNumber ().real ().value (); }
291
+ Number&& trivial55() { return std::forward (*number); }
292
+ unsigned trivial56 () { Number n { 5 }; return std::move (n).value (); }
293
+ void trivial57 () { do { break ; } while (1 ); }
294
+ void trivial58 () { do { continue ; } while (0 ); }
295
+ void trivial59 () {
296
+ do { goto label; }
297
+ while (0 );
298
+ label:
299
+ return ;
300
+ }
301
+ unsigned trivial60 () { return ObjectWithNonTrivialDestructor { 5 }.value (); }
259
302
260
303
static RefCounted& singleton () {
261
304
static RefCounted s_RefCounted;
@@ -413,6 +456,16 @@ class UnrelatedClass {
413
456
getFieldTrivial ().trivial48 (); // no-warning
414
457
getFieldTrivial ().trivial49 (); // no-warning
415
458
getFieldTrivial ().trivial50 (); // no-warning
459
+ getFieldTrivial ().trivial51 (); // no-warning
460
+ getFieldTrivial ().trivial52 (); // no-warning
461
+ getFieldTrivial ().trivial53 (); // no-warning
462
+ getFieldTrivial ().trivial54 (); // no-warning
463
+ getFieldTrivial ().trivial55 (); // no-warning
464
+ getFieldTrivial ().trivial56 (); // no-warning
465
+ getFieldTrivial ().trivial57 (); // no-warning
466
+ getFieldTrivial ().trivial58 (); // no-warning
467
+ getFieldTrivial ().trivial59 (); // no-warning
468
+ getFieldTrivial ().trivial60 (); // no-warning
416
469
417
470
RefCounted::singleton ().trivial18 (); // no-warning
418
471
RefCounted::singleton ().someFunction (); // no-warning
0 commit comments