1*27ea0c4eSSam McCall // RUN: %clang_cc1 -fsyntax-only -verify -std=c++17 %s 2*27ea0c4eSSam McCall // RUN: not %clang_cc1 -fsyntax-only -ast-dump %s -std=c++17 | FileCheck %s 3*27ea0c4eSSam McCall test()4*27ea0c4eSSam McCallvoid test() { 5*27ea0c4eSSam McCall while(!!!) // expected-error {{expected expression}} 6*27ea0c4eSSam McCall int whileBody; 7*27ea0c4eSSam McCall // CHECK: WhileStmt 8*27ea0c4eSSam McCall // CHECK: RecoveryExpr {{.*}} <line:{{.*}}:9, col:11> 'bool' 9*27ea0c4eSSam McCall // CHECK: whileBody 'int' 10*27ea0c4eSSam McCall 11*27ea0c4eSSam McCall for(!!!) // expected-error {{expected expression}} expected-error {{expected ';'}} 12*27ea0c4eSSam McCall int forBody; 13*27ea0c4eSSam McCall // CHECK: ForStmt 14*27ea0c4eSSam McCall // FIXME: the AST should have a RecoveryExpr to distinguish from for(;;) 15*27ea0c4eSSam McCall // CHECK-NOT: RecoveryExpr 16*27ea0c4eSSam McCall // CHECK: forBody 'int' 17*27ea0c4eSSam McCall 18*27ea0c4eSSam McCall for(auto c : !!!) // expected-error {{expected expression}} 19*27ea0c4eSSam McCall int forEachBody; 20*27ea0c4eSSam McCall // FIXME: parse the foreach body 21*27ea0c4eSSam McCall // CHECK-NOT: CXXForRangeStmt 22*27ea0c4eSSam McCall // CHECK-NOT: forEachBody 'int' 23*27ea0c4eSSam McCall 24*27ea0c4eSSam McCall do 25*27ea0c4eSSam McCall int doBody; 26*27ea0c4eSSam McCall while(!!!); // expected-error {{expected expression}} 27*27ea0c4eSSam McCall // CHECK: DoStmt 28*27ea0c4eSSam McCall // CHECK: doBody 'int' 29*27ea0c4eSSam McCall // CHECK: RecoveryExpr {{.*}} <line:{{.*}}:9, col:11> 'bool' 30*27ea0c4eSSam McCall 31*27ea0c4eSSam McCall if(!!!) // expected-error {{expected expression}} 32*27ea0c4eSSam McCall int ifBody; 33*27ea0c4eSSam McCall else 34*27ea0c4eSSam McCall int elseBody; 35*27ea0c4eSSam McCall // CHECK: IfStmt 36*27ea0c4eSSam McCall // CHECK: RecoveryExpr {{.*}} <line:{{.*}}:6, col:8> 'bool' 37*27ea0c4eSSam McCall // CHECK: ifBody 'int' 38*27ea0c4eSSam McCall // CHECK: elseBody 'int' 39*27ea0c4eSSam McCall 40*27ea0c4eSSam McCall switch(!!!) // expected-error {{expected expression}} 41*27ea0c4eSSam McCall int switchBody; 42*27ea0c4eSSam McCall // CHECK: SwitchStmt 43*27ea0c4eSSam McCall // CHECK: RecoveryExpr {{.*}} <line:{{.*}}:10, col:12> 'int' 44*27ea0c4eSSam McCall // CHECK: switchBody 'int' 45*27ea0c4eSSam McCall 46*27ea0c4eSSam McCall switch (;) // expected-error {{expected expression}} 47*27ea0c4eSSam McCall int switchBody; 48*27ea0c4eSSam McCall // CHECK: SwitchStmt 49*27ea0c4eSSam McCall // CHECK: NullStmt 50*27ea0c4eSSam McCall // CHECK: RecoveryExpr {{.*}} <col:11> 'int' 51*27ea0c4eSSam McCall // CHECK: switchBody 'int' 52*27ea0c4eSSam McCall 53*27ea0c4eSSam McCall switch (;;) // expected-error {{expected expression}} 54*27ea0c4eSSam McCall int switchBody; 55*27ea0c4eSSam McCall // CHECK: SwitchStmt 56*27ea0c4eSSam McCall // CHECK: NullStmt 57*27ea0c4eSSam McCall // CHECK: RecoveryExpr {{.*}} <col:11, col:12> 'int' 58*27ea0c4eSSam McCall // CHECK: switchBody 'int' 59*27ea0c4eSSam McCall 60*27ea0c4eSSam McCall switch (!!!;) // expected-error {{expected expression}} 61*27ea0c4eSSam McCall int switchBody; 62*27ea0c4eSSam McCall // CHECK: SwitchStmt 63*27ea0c4eSSam McCall // CHECK: RecoveryExpr {{.*}} <line:{{.*}}:11, col:14> 'int' 64*27ea0c4eSSam McCall // CHECK: switchBody 'int' 65*27ea0c4eSSam McCall } 66