[clang] 70e2c7a - [AST][RecoveryExpr] Add recovery-ast tests for C language, NFC.

Haojian Wu via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 20 06:34:59 PDT 2020


Author: Haojian Wu
Date: 2020-07-20T15:33:59+02:00
New Revision: 70e2c7ad2e891ccecbf59a0562586538de96aeaa

URL: https://github.com/llvm/llvm-project/commit/70e2c7ad2e891ccecbf59a0562586538de96aeaa
DIFF: https://github.com/llvm/llvm-project/commit/70e2c7ad2e891ccecbf59a0562586538de96aeaa.diff

LOG: [AST][RecoveryExpr] Add recovery-ast tests for C language, NFC.

some examples are working already.

Differential Revision: https://reviews.llvm.org/D84146

Added: 
    clang/test/AST/ast-dump-recovery.c

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/clang/test/AST/ast-dump-recovery.c b/clang/test/AST/ast-dump-recovery.c
new file mode 100644
index 000000000000..b49c0103dbaf
--- /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.
+}


        


More information about the cfe-commits mailing list