forked from OSchip/llvm-project
53 lines
2.0 KiB
C
53 lines
2.0 KiB
C
// 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: `-RecoveryExpr {{.*}}
|
|
// CHECK-NEXT: |-DeclRefExpr {{.*}} 'a'
|
|
// CHECK-NEXT: |-TypoExpr {{.*}}
|
|
// CHECK-NEXT: `-DeclRefExpr {{.*}} 'a'
|
|
// FIXME: The TypoExpr should never be print, and should be downgraded to
|
|
// RecoveryExpr -- typo correction is performed too early in C-only codepath,
|
|
// which makes no correction when clang finishes the full expr (Sema::Sema::ActOnFinishFullExpr).
|
|
// this will be fixed when we support dependent mechanism and delayed typo correction for C.
|
|
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;
|
|
// FIXME: the top-level expr should be a binary operator.
|
|
// CHECK: ImplicitCastExpr {{.*}} contains-errors <LValueToRValue>
|
|
// CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors lvalue
|
|
// CHECK-NEXT: |-DeclRefExpr {{.*}} 'ptr' 'int *'
|
|
// CHECK-NEXT: `-RecoveryExpr {{.*}}
|
|
// CHECK-NEXT: `-DeclRefExpr {{.*}} 'some_func'
|
|
ptr = some_func(); // should not crash
|
|
}
|