brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · 09a03fb Raw
121 lines · c
1// RUN: not %clang_cc1 -triple x86_64-unknown-unknown -frecovery-ast -fno-recovery-ast-type -ast-dump %s | FileCheck -strict-whitespace %s2 3int some_func(int);4 5// CHECK:     VarDecl {{.*}} unmatch_arg_call 'int' cinit6// CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors7// CHECK-NEXT:   `-DeclRefExpr {{.*}} 'some_func'8int unmatch_arg_call = some_func();9 10const int a = 1;11 12// CHECK:     VarDecl {{.*}} postfix_inc13// CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors14// CHECK-NEXT:   `-DeclRefExpr {{.*}} 'a'15int postfix_inc = a++;16 17// CHECK:     VarDecl {{.*}} unary_address18// CHECK-NEXT:`-RecoveryExpr {{.*}} contains-errors19// CHECK-NEXT:  `-ParenExpr {{.*}}20// CHECK-NEXT:    `-BinaryOperator {{.*}} '+'21// CHECK-NEXT:      |-ImplicitCastExpr22// CHECK-NEXT:      | `-DeclRefExpr {{.*}} 'a'23// CHECK-NEXT:      `-IntegerLiteral {{.*}} 'int'24int unary_address = &(a + 1);25 26void test1() {27  // CHECK:     `-RecoveryExpr {{.*}} contains-errors28  // CHECK-NEXT:  `-DeclRefExpr {{.*}} 'a' 'const int'29  static int foo = a++; // verify no crash on local static var decl.30}31 32void test2() {33  int* ptr;34  // CHECK:     BinaryOperator {{.*}} 'int *' contains-errors '='35  // CHECK-NEXT: |-DeclRefExpr {{.*}} 'ptr' 'int *'36  // CHECK-NEXT: `-RecoveryExpr {{.*}}37  // CHECK-NEXT:   `-DeclRefExpr {{.*}} 'some_func'38  ptr = some_func(); // should not crash39 40  int compoundOp;41  // CHECK:     CompoundAssignOperator {{.*}} 'int' contains-errors '+='42  // CHECK-NEXT: |-DeclRefExpr {{.*}} 'compoundOp'43  // CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors44  // CHECK-NEXT:   `-DeclRefExpr {{.*}} 'some_func'45  compoundOp += some_func();46 47  // CHECK:     BinaryOperator {{.*}} 'int' contains-errors '||'48  // CHECK-NEXT: |-RecoveryExpr {{.*}}49  // CHECK-NEXT: | `-DeclRefExpr {{.*}} 'some_func'50  // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 151  some_func() || 1;52 53  // CHECK:     BinaryOperator {{.*}} '<dependent type>' contains-errors ','54  // CHECK-NEXT: |-IntegerLiteral {{.*}} 'int' 155  // CHECK-NEXT: `-RecoveryExpr {{.*}}56  // CHECK-NEXT:   `-DeclRefExpr {{.*}} 'some_func'57  1, some_func();58  // CHECK:     BinaryOperator {{.*}} 'int' contains-errors ','59  // CHECK-NEXT: |-RecoveryExpr {{.*}} '<dependent type>'60  // CHECK-NEXT: | `-DeclRefExpr {{.*}} 'some_func'61  // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 162  some_func(), 1;63 64  // conditional operator (comparison is invalid)65  float f;66  // CHECK:     ConditionalOperator {{.*}} '<dependent type>' contains-errors67  // CHECK-NEXT: |-RecoveryExpr {{.*}} '<dependent type>'68  // CHECK-NEXT: | |-DeclRefExpr {{.*}} 'int *' lvalue69  // CHECK-NEXT: | `-DeclRefExpr {{.*}} 'float' lvalue70  // CHECK-NEXT: |-DeclRefExpr {{.*}} 'int *' lvalue71  // CHECK-NEXT: `-DeclRefExpr {{.*}} 'float' lvalue72  (ptr > f ? ptr : f);73 74  // CHECK:     CStyleCastExpr {{.*}} 'float' contains-errors <Dependent>75  // CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>'76  // CHECK-NEXT:   `-DeclRefExpr {{.*}} 'some_func'77  (float)some_func();78}79 80void test3() {81  // CHECK:     CallExpr {{.*}} '<dependent type>' contains-errors82  // CHECK-NEXT: |-ParenExpr {{.*}} contains-errors lvalue83  // CHECK-NEXT: | `-RecoveryExpr {{.*}} contains-errors84  // CHECK-NEXT: |   `-DeclRefExpr {{.*}} '__builtin_classify_type'85  // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 186  (*__builtin_classify_type)(1);87}88 89// Verify no crash.90void test4() {91  enum GH62446 {92    // CHECK:      RecoveryExpr {{.*}} '<dependent type>' contains-errors lvalue93    // CHECK-NEXT: |-StringLiteral {{.*}} "a"94    // CHECK-NEXT: `-IntegerLiteral {{.*}} 295    invalid_enum_value = "a" * 2,96    b,97  };98}99 100// No crash on DeclRefExpr that refers to ValueDecl with invalid initializers.101void test7() {102  int b[] = {""()};103 104  // CHECK:      CStyleCastExpr {{.*}} 'unsigned int' contains-errors105  // CHECK-NEXT: | `-DeclRefExpr {{.*}} 'int[]' contains-errors106  (unsigned) b; // GH50236107 108  // CHECK:      BinaryOperator {{.*}} '<dependent type>' contains-errors '+'109  // CHECK-NEXT: |-DeclRefExpr {{.*}} 'int[]' contains-errors110  // CHECK-NEXT: `-IntegerLiteral {{.*}}111  b + 1; // GH50243112 113  // CHECK:      CallExpr {{.*}} '<dependent type>' contains-errors114  // CHECK-NEXT: |-DeclRefExpr {{.*}} 'int ()' Function115  // CHECK-NEXT: `-DeclRefExpr {{.*}} 'int[]' contains-errors116  return c(b); // GH48636117}118int test8_GH50320_b[] = {""()};119// CHECK: ArraySubscriptExpr {{.*}} 'int' contains-errors lvalue120int test8 = test_8GH50320_b[0];121