From 70e2c7ad2e891ccecbf59a0562586538de96aeaa Mon Sep 17 00:00:00 2001 From: Haojian Wu Date: Mon, 20 Jul 2020 15:29:14 +0200 Subject: [PATCH] [AST][RecoveryExpr] Add recovery-ast tests for C language, NFC. some examples are working already. Differential Revision: https://reviews.llvm.org/D84146 --- clang/test/AST/ast-dump-recovery.c | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 clang/test/AST/ast-dump-recovery.c diff --git a/clang/test/AST/ast-dump-recovery.c b/clang/test/AST/ast-dump-recovery.c new file mode 100644 index 0000000..b49c010 --- /dev/null +++ b/clang/test/AST/ast-dump-recovery.c @@ -0,0 +1,41 @@ +// 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. +} -- 2.7.4