| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++17 %s |
| // RUN: not %clang_cc1 -ast-dump %s -std=c++17 | FileCheck %s |
| |
| void test() { |
| while(!!!) // expected-error {{expected expression}} |
| int whileBody; |
| // CHECK: WhileStmt |
| // CHECK: RecoveryExpr {{.*}} <line:{{.*}}:9, col:11> 'bool' |
| // CHECK: whileBody 'int' |
| |
| for(!!!) // expected-error {{expected expression}} expected-error {{expected ';'}} |
| int forBody; |
| // CHECK: ForStmt |
| // FIXME: the AST should have a RecoveryExpr to distinguish from for(;;) |
| // CHECK-NOT: RecoveryExpr |
| // CHECK: forBody 'int' |
| |
| for(auto c : !!!) // expected-error {{expected expression}} |
| int forEachBody; |
| // FIXME: parse the foreach body |
| // CHECK-NOT: CXXForRangeStmt |
| // CHECK-NOT: forEachBody 'int' |
| |
| do |
| int doBody; |
| while(!!!); // expected-error {{expected expression}} |
| // CHECK: DoStmt |
| // CHECK: doBody 'int' |
| // CHECK: RecoveryExpr {{.*}} <line:{{.*}}:9, col:11> 'bool' |
| |
| if(!!!) // expected-error {{expected expression}} |
| int ifBody; |
| else |
| int elseBody; |
| // CHECK: IfStmt |
| // CHECK: RecoveryExpr {{.*}} <line:{{.*}}:6, col:8> 'bool' |
| // CHECK: ifBody 'int' |
| // CHECK: elseBody 'int' |
| |
| switch(!!!) // expected-error {{expected expression}} |
| int switchBody; |
| // CHECK: SwitchStmt |
| // CHECK: RecoveryExpr {{.*}} <line:{{.*}}:10, col:12> 'int' |
| // CHECK: switchBody 'int' |
| |
| switch (;) // expected-error {{expected expression}} |
| int switchBody; |
| // CHECK: SwitchStmt |
| // CHECK: NullStmt |
| // CHECK: RecoveryExpr {{.*}} <col:11> 'int' |
| // CHECK: switchBody 'int' |
| |
| switch (;;) // expected-error {{expected expression}} |
| int switchBody; |
| // CHECK: SwitchStmt |
| // CHECK: NullStmt |
| // CHECK: RecoveryExpr {{.*}} <col:11, col:12> 'int' |
| // CHECK: switchBody 'int' |
| |
| switch (!!!;) // expected-error {{expected expression}} |
| int switchBody; |
| // CHECK: SwitchStmt |
| // CHECK: RecoveryExpr {{.*}} <line:{{.*}}:11, col:14> 'int' |
| // CHECK: switchBody 'int' |
| } |