Mercurial > hg > CbC > CbC_llvm
diff clang/test/AST/ast-dump-recovery.c @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | |
children | 1f2b6ac9f198 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clang/test/AST/ast-dump-recovery.c Tue Jun 08 06:07:14 2021 +0900 @@ -0,0 +1,100 @@ +// RUN: not %clang_cc1 -triple x86_64-unknown-unknown -frecovery-ast -fno-recovery-ast-type -ast-dump %s | FileCheck -strict-whitespace %s + +int some_func(int); + +// CHECK: VarDecl {{.*}} unmatch_arg_call 'int' cinit +// CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors +// CHECK-NEXT: `-DeclRefExpr {{.*}} 'some_func' +int unmatch_arg_call = some_func(); + +const int a = 1; + +// CHECK: VarDecl {{.*}} postfix_inc +// CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors +// CHECK-NEXT: `-DeclRefExpr {{.*}} 'a' +int postfix_inc = a++; + +// CHECK: VarDecl {{.*}} unary_address +// CHECK-NEXT:`-RecoveryExpr {{.*}} contains-errors +// CHECK-NEXT: `-ParenExpr {{.*}} +// CHECK-NEXT: `-BinaryOperator {{.*}} '+' +// CHECK-NEXT: |-ImplicitCastExpr +// CHECK-NEXT: | `-DeclRefExpr {{.*}} 'a' +// CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' +int unary_address = &(a + 1); + +// CHECK: VarDecl {{.*}} ternary 'int' cinit +// CHECK-NEXT: `-ConditionalOperator {{.*}} +// CHECK-NEXT: |-DeclRefExpr {{.*}} 'a' +// CHECK-NEXT: |-RecoveryExpr {{.*}} +// CHECK-NEXT: `-DeclRefExpr {{.*}} 'a' +int ternary = a ? undef : a; + +void test1() { + // CHECK: `-RecoveryExpr {{.*}} contains-errors + // CHECK-NEXT: `-DeclRefExpr {{.*}} 'a' 'const int' + static int foo = a++; // verify no crash on local static var decl. +} + +void test2() { + int* ptr; + // CHECK: BinaryOperator {{.*}} 'int *' contains-errors '=' + // CHECK-NEXT: |-DeclRefExpr {{.*}} 'ptr' 'int *' + // CHECK-NEXT: `-RecoveryExpr {{.*}} + // CHECK-NEXT: `-DeclRefExpr {{.*}} 'some_func' + ptr = some_func(); // should not crash + + int compoundOp; + // CHECK: CompoundAssignOperator {{.*}} 'int' contains-errors '+=' + // CHECK-NEXT: |-DeclRefExpr {{.*}} 'compoundOp' + // CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors + // CHECK-NEXT: `-DeclRefExpr {{.*}} 'some_func' + compoundOp += some_func(); + + // CHECK: BinaryOperator {{.*}} 'int' contains-errors '||' + // CHECK-NEXT: |-RecoveryExpr {{.*}} + // CHECK-NEXT: | `-DeclRefExpr {{.*}} 'some_func' + // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1 + some_func() || 1; + + // CHECK: BinaryOperator {{.*}} '<dependent type>' contains-errors ',' + // CHECK-NEXT: |-IntegerLiteral {{.*}} 'int' 1 + // CHECK-NEXT: `-RecoveryExpr {{.*}} + // CHECK-NEXT: `-DeclRefExpr {{.*}} 'some_func' + 1, some_func(); + // CHECK: BinaryOperator {{.*}} 'int' contains-errors ',' + // CHECK-NEXT: |-RecoveryExpr {{.*}} '<dependent type>' + // CHECK-NEXT: | `-DeclRefExpr {{.*}} 'some_func' + // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1 + some_func(), 1; + + // conditional operator (comparison is invalid) + float f; + // CHECK: ConditionalOperator {{.*}} '<dependent type>' contains-errors + // CHECK-NEXT: |-RecoveryExpr {{.*}} '<dependent type>' + // CHECK-NEXT: | |-DeclRefExpr {{.*}} 'int *' lvalue + // CHECK-NEXT: | `-DeclRefExpr {{.*}} 'float' lvalue + // CHECK-NEXT: |-DeclRefExpr {{.*}} 'int *' lvalue + // CHECK-NEXT: `-DeclRefExpr {{.*}} 'float' lvalue + (ptr > f ? ptr : f); + + // CHECK: CStyleCastExpr {{.*}} 'float' contains-errors <Dependent> + // CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>' + // CHECK-NEXT: `-DeclRefExpr {{.*}} 'some_func' + (float)some_func(); +} + +void test3() { + // CHECK: CallExpr {{.*}} '<dependent type>' contains-errors + // CHECK-NEXT: |-ParenExpr {{.*}} contains-errors lvalue + // CHECK-NEXT: | `-RecoveryExpr {{.*}} contains-errors + // CHECK-NEXT: | `-DeclRefExpr {{.*}} '__builtin_classify_type' + // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1 + (*__builtin_classify_type)(1); + + extern void ext(); + // CHECK: CallExpr {{.*}} 'void' contains-errors + // CHECK-NEXT: |-DeclRefExpr {{.*}} 'ext' + // CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>' + ext(undef_var); +}