@@ -9,28 +9,6 @@ int some_func(int *);
99// CHECK-NEXT: `-IntegerLiteral {{.*}} 123
1010// DISABLED-NOT: -RecoveryExpr {{.*}} contains-errors
1111int invalid_call = some_func(123 );
12- void test_invalid_call_1 (int s) {
13- // CHECK: CallExpr {{.*}} '<dependent type>' contains-errors
14- // CHECK-NEXT: |-UnresolvedLookupExpr {{.*}} 'some_func'
15- // CHECK-NEXT: |-RecoveryExpr {{.*}} <col:13>
16- // CHECK-NEXT: `-BinaryOperator {{.*}}
17- // CHECK-NEXT: |-RecoveryExpr {{.*}}
18- // CHECK-NEXT: `-IntegerLiteral {{.*}} <col:28> 'int' 1
19- some_func (undef1, undef2+1 );
20-
21- // CHECK: BinaryOperator {{.*}} '<dependent type>' contains-errors '='
22- // CHECK-NEXT: |-DeclRefExpr {{.*}} 's'
23- // CHECK-NEXT: `-CallExpr {{.*}} '<dependent type>' contains-errors
24- // CHECK-NEXT: |-UnresolvedLookupExpr {{.*}} 'some_func'
25- // CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors
26- s = some_func (undef1);
27-
28- // CHECK: VarDecl {{.*}} var 'int'
29- // CHECK-NEXT: `-CallExpr {{.*}} '<dependent type>' contains-errors
30- // CHECK-NEXT: |-UnresolvedLookupExpr {{.*}} 'some_func'
31- // CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors
32- int var = some_func (undef1);
33- }
3412
3513int some_func2 (int a, int b);
3614void test_invalid_call_2 () {
@@ -63,22 +41,6 @@ int ambig_func(float);
6341// DISABLED-NOT: -RecoveryExpr {{.*}} contains-errors
6442int ambig_call = ambig_func(123 );
6543
66- // CHECK: VarDecl {{.*}} unresolved_call1
67- // CHECK-NEXT:`-RecoveryExpr {{.*}} '<dependent type>' contains-errors
68- // CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} 'bar'
69- // DISABLED-NOT: -RecoveryExpr {{.*}} contains-errors
70- int unresolved_call1 = bar();
71-
72- // CHECK: VarDecl {{.*}} unresolved_call2
73- // CHECK-NEXT:`-CallExpr {{.*}} contains-errors
74- // CHECK-NEXT: |-UnresolvedLookupExpr {{.*}} 'bar'
75- // CHECK-NEXT: |-RecoveryExpr {{.*}} contains-errors
76- // CHECK-NEXT: | `-UnresolvedLookupExpr {{.*}} 'baz'
77- // CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors
78- // CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} 'qux'
79- // DISABLED-NOT: -RecoveryExpr {{.*}} contains-errors
80- int unresolved_call2 = bar(baz(), qux());
81-
8244constexpr int a = 10 ;
8345
8446// CHECK: VarDecl {{.*}} postfix_inc
@@ -177,11 +139,6 @@ void test2(Foo2 f) {
177139 f.overload (1 );
178140}
179141
180- // CHECK: |-AlignedAttr {{.*}} alignas
181- // CHECK-NEXT:| `-RecoveryExpr {{.*}} contains-errors
182- // CHECK-NEXT:| `-UnresolvedLookupExpr {{.*}} 'invalid'
183- struct alignas (invalid()) Aligned {};
184-
185142auto f ();
186143int f (double );
187144// CHECK: VarDecl {{.*}} unknown_type_call 'int'
@@ -203,16 +160,6 @@ void InvalidInitalizer(int x) {
203160 // CHECK-NEXT: `-InitListExpr
204161 // CHECK-NEDT: `-DeclRefExpr {{.*}} 'x'
205162 Bar a3{x};
206- // CHECK: `-VarDecl {{.*}} a4 'Bar'
207- // CHECK-NEXT: `-ParenListExpr {{.*}} 'NULL TYPE' contains-errors
208- // CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors
209- // CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} 'invalid'
210- Bar a4 (invalid ());
211- // CHECK: `-VarDecl {{.*}} a5 'Bar'
212- // CHECK-NEXT: `-InitListExpr {{.*}} contains-errors
213- // CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors
214- // CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} 'invalid'
215- Bar a5{invalid ()};
216163
217164 // CHECK: `-VarDecl {{.*}} b1 'Bar'
218165 // CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors
@@ -231,51 +178,11 @@ void InvalidInitalizer(int x) {
231178 // CHECK-NEXT: `-InitListExpr {{.*}} 'void'
232179 // CHECK-NEXT: `-DeclRefExpr {{.*}} 'x' 'int'
233180 Bar b4 = Bar{x};
234- // CHECK: `-VarDecl {{.*}} b5 'Bar'
235- // CHECK-NEXT: `-CXXUnresolvedConstructExpr {{.*}} 'Bar' contains-errors 'Bar'
236- // CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors
237- // CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} 'invalid'
238- Bar b5 = Bar (invalid ());
239- // CHECK: `-VarDecl {{.*}} b6 'Bar'
240- // CHECK-NEXT: `-CXXUnresolvedConstructExpr {{.*}} 'Bar' contains-errors 'Bar'
241- // CHECK-NEXT: `-InitListExpr {{.*}} contains-errors
242- // CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors
243- // CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} 'invalid'
244- Bar b6 = Bar{invalid ()};
245181
246182 // CHECK: RecoveryExpr {{.*}} 'Bar' contains-errors
247183 // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1
248184 Bar (1 );
249-
250- // CHECK: `-VarDecl {{.*}} var1
251- // CHECK-NEXT: `-BinaryOperator {{.*}} '<dependent type>' contains-errors
252- // CHECK-NEXT: |-RecoveryExpr {{.*}} '<dependent type>' contains-errors
253- // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1
254- int var1 = undef + 1 ;
255185}
256- void InitializerForAuto () {
257- // CHECK: `-VarDecl {{.*}} invalid a 'auto'
258- // CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>' contains-errors
259- // CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} 'invalid'
260- auto a = invalid ();
261-
262- // CHECK: `-VarDecl {{.*}} invalid b 'auto'
263- // CHECK-NEXT: `-CallExpr {{.*}} '<dependent type>' contains-errors
264- // CHECK-NEXT: |-UnresolvedLookupExpr {{.*}} 'some_func'
265- // CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>' contains-errors
266- // CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} 'invalid'
267- auto b = some_func (invalid ());
268-
269- decltype (ned);
270- // very bad initailizer: there is an unresolved typo expr internally, we just
271- // drop it.
272- // CHECK: `-VarDecl {{.*}} invalid unresolved_typo 'auto'
273- auto unresolved_typo = gned.*[] {};
274- }
275-
276- // Verified that the generated call operator is invalid.
277- // CHECK: |-CXXMethodDecl {{.*}} invalid operator() 'auto () const -> auto'
278- using Escape = decltype ([] { return undef (); }());
279186
280187// CHECK: VarDecl {{.*}} NoCrashOnInvalidInitList
281188// CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>' contains-errors lvalue
@@ -301,70 +208,15 @@ void ValueCategory() {
301208 xvalue (); // call to a function (rvalue reference return type) yields an xvalue.
302209}
303210
304- void InvalidCondition () {
305- // CHECK: IfStmt {{.*}}
306- // CHECK-NEXT: |-RecoveryExpr {{.*}} <col:7, col:15> '<dependent type>' contains-errors
307- // CHECK-NEXT: | `-UnresolvedLookupExpr {{.*}} <col:7>
308- if (invalid ()) {}
309-
310- // CHECK: WhileStmt {{.*}}
311- // CHECK-NEXT: |-RecoveryExpr {{.*}} <col:10, col:18> '<dependent type>' contains-errors
312- // CHECK-NEXT: | `-UnresolvedLookupExpr {{.*}} <col:10>
313- while (invalid ()) {}
314-
315- // CHECK: SwitchStmt {{.*}}
316- // CHECK-NEXT: |-RecoveryExpr {{.*}} '<dependent type>' contains-errors
317- // CHECK-NEXT: | `-UnresolvedLookupExpr {{.*}} <col:10>
318- switch (invalid ()) {
319- case 1 :
320- break ;
321- }
322- // FIXME: figure out why the type of ConditionalOperator is not int.
323- // CHECK: ConditionalOperator {{.*}} '<dependent type>' contains-errors
324- // CHECK-NEXT: |-RecoveryExpr {{.*}} '<dependent type>' contains-errors
325- // CHECK-NEXT: | `-UnresolvedLookupExpr {{.*}}
326- // CHECK-NEXT: |-IntegerLiteral {{.*}} 'int' 1
327- // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 2
328- invalid () ? 1 : 2 ;
329- }
330-
331211void CtorInitializer () {
332212 struct S {int m};
333- class MemberInit {
334- int x, y, z;
335- S s;
336- MemberInit () : x(invalid), y(invalid, invalid), z(invalid()), s(1 ,2 ) {}
337- // CHECK: CXXConstructorDecl {{.*}} MemberInit 'void ()'
338- // CHECK-NEXT: |-CXXCtorInitializer Field {{.*}} 'x' 'int'
339- // CHECK-NEXT: | `-ParenListExpr
340- // CHECK-NEXT: | `-RecoveryExpr {{.*}} '<dependent type>'
341- // CHECK-NEXT: |-CXXCtorInitializer Field {{.*}} 'y' 'int'
342- // CHECK-NEXT: | `-ParenListExpr
343- // CHECK-NEXT: | |-RecoveryExpr {{.*}} '<dependent type>'
344- // CHECK-NEXT: | `-RecoveryExpr {{.*}} '<dependent type>'
345- // CHECK-NEXT: |-CXXCtorInitializer Field {{.*}} 'z' 'int'
346- // CHECK-NEXT: | `-ParenListExpr
347- // CHECK-NEXT: | `-RecoveryExpr {{.*}} '<dependent type>'
348- // CHECK-NEXT: | `-UnresolvedLookupExpr {{.*}} '<overloaded function type>'
349- // CHECK-NEXT: |-CXXCtorInitializer Field {{.*}} 's' 'S'
350- // CHECK-NEXT: | `-RecoveryExpr {{.*}} 'S' contains-errors
351- // CHECK-NEXT: | |-IntegerLiteral {{.*}} 1
352- // CHECK-NEXT: | `-IntegerLiteral {{.*}} 2
353- };
354213 class BaseInit : S {
355214 BaseInit (float ) : S(" no match" ) {}
356215 // CHECK: CXXConstructorDecl {{.*}} BaseInit 'void (float)'
357216 // CHECK-NEXT: |-ParmVarDecl
358217 // CHECK-NEXT: |-CXXCtorInitializer 'S'
359218 // CHECK-NEXT: | `-RecoveryExpr {{.*}} 'S'
360219 // CHECK-NEXT: | `-StringLiteral
361-
362- BaseInit (double ) : S(invalid) {}
363- // CHECK: CXXConstructorDecl {{.*}} BaseInit 'void (double)'
364- // CHECK-NEXT: |-ParmVarDecl
365- // CHECK-NEXT: |-CXXCtorInitializer 'S'
366- // CHECK-NEXT: | `-ParenListExpr
367- // CHECK-NEXT: | `-RecoveryExpr {{.*}} '<dependent type>'
368220 };
369221 class DelegatingInit {
370222 DelegatingInit (float ) : DelegatingInit(" no match" ) {}
@@ -373,13 +225,6 @@ void CtorInitializer() {
373225 // CHECK-NEXT: |-CXXCtorInitializer 'DelegatingInit'
374226 // CHECK-NEXT: | `-RecoveryExpr {{.*}} 'DelegatingInit'
375227 // CHECK-NEXT: | `-StringLiteral
376-
377- DelegatingInit (double ) : DelegatingInit(invalid) {}
378- // CHECK: CXXConstructorDecl {{.*}} DelegatingInit 'void (double)'
379- // CHECK-NEXT: |-ParmVarDecl
380- // CHECK-NEXT: |-CXXCtorInitializer 'DelegatingInit'
381- // CHECK-NEXT: | `-ParenListExpr
382- // CHECK-NEXT: | `-RecoveryExpr {{.*}} '<dependent type>'
383228 };
384229}
385230
@@ -423,64 +268,6 @@ void returnInitListFromVoid() {
423268 // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 8
424269}
425270
426- void RecoveryExprForInvalidDecls (Unknown InvalidDecl) {
427- InvalidDecl + 1 ;
428- // CHECK: BinaryOperator {{.*}}
429- // CHECK-NEXT: |-RecoveryExpr {{.*}} '<dependent type>'
430- // CHECK-NEXT: | | `-DeclRefExpr {{.*}} 'InvalidDecl' 'int'
431- // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1
432- InvalidDecl ();
433- // CHECK: CallExpr {{.*}}
434- // CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>'
435- }
436-
437- void InitializerOfInvalidDecl () {
438- int ValidDecl;
439- Unkown InvalidDecl = ValidDecl;
440- // CHECK: VarDecl {{.*}} invalid InvalidDecl
441- // CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>' contains-errors
442- // CHECK-NEXT: `-DeclRefExpr {{.*}} 'int' lvalue Var {{.*}} 'ValidDecl'
443-
444- Unknown InvalidDeclWithInvalidInit = Invalid;
445- // CHECK: VarDecl {{.*}} invalid InvalidDeclWithInvalidInit
446- // CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>' contains-errors
447- }
448-
449- void RecoverToAnInvalidDecl () {
450- Unknown* foo; // invalid decl
451- goo; // the typo was correct to the invalid foo.
452- // Verify that RecoveryExpr has an inner DeclRefExpr.
453- // CHECK: RecoveryExpr {{.*}} '<dependent type>' contains-errors lvalue
454- // CHECK-NEXT: `-DeclRefExpr {{.*}} 'foo' 'int *'
455- }
456-
457- void RecoveryToDoWhileStmtCond () {
458- // CHECK: FunctionDecl {{.*}} RecoveryToDoWhileStmtCond
459- // CHECK: `-DoStmt {{.*}}
460- // CHECK-NEXT: |-CompoundStmt {{.*}}
461- // CHECK-NEXT: `-BinaryOperator {{.*}} '<dependent type>' contains-errors '<'
462- // CHECK-NEXT: |-BinaryOperator {{.*}} '<dependent type>' contains-errors '+'
463- // CHECK-NEXT: | |-RecoveryExpr {{.*}} '<dependent type>' contains-errors lvalue
464- // CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 1
465- // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 10
466- do {} while (some_invalid_val + 1 < 10 );
467- }
468-
469- void RecoveryForStmtCond () {
470- // CHECK:FunctionDecl {{.*}} RecoveryForStmtCond
471- // CHECK-NEXT:`-CompoundStmt {{.*}}
472- // CHECK-NEXT: `-ForStmt {{.*}}
473- // CHECK-NEXT: |-DeclStmt {{.*}}
474- // CHECK-NEXT: | `-VarDecl {{.*}}
475- // CHECK-NEXT: | `-IntegerLiteral {{.*}} <col:16> 'int' 0
476- // CHECK-NEXT: |-<<<NULL>>>
477- // CHECK-NEXT: |-RecoveryExpr {{.*}} 'bool' contains-errors
478- // CHECK-NEXT: |-UnaryOperator {{.*}} 'int' lvalue prefix '++'
479- // CHECK-NEXT: | `-DeclRefExpr {{.*}} 'int' lvalue Var {{.*}} 'i' 'int'
480- // CHECK-NEXT: `-CompoundStmt {{.*}}
481- for (int i = 0 ; i < invalid; ++i) {}
482- }
483-
484271// Fix crash issue https://github.com/llvm/llvm-project/issues/112560.
485272// Make sure clang compiles the following code without crashing:
486273
0 commit comments