// Test without serialization: // RUN: %clang_cc1 -Wno-unused -fblocks -ast-dump -ast-dump-filter Test %s \ // RUN: | FileCheck --strict-whitespace %s // // Test with serialization: // RUN: %clang_cc1 -Wno-unused -fblocks -emit-pch -o %t %s // RUN: %clang_cc1 -x objective-c++ -Wno-unused -fblocks -include-pch %t \ // RUN: -ast-dump-all -ast-dump-filter Test /dev/null \ // RUN: | sed -e "s/ //" -e "s/ imported//" \ // RUN: | FileCheck --strict-whitespace %s @interface A @end @interface TestObjCImplementation : A @end @implementation TestObjCImplementation : A { struct X { int i; } X; } - (void) foo { } @end // CHECK: ObjCImplementationDecl{{.*}} TestObjCImplementation // CHECK-NEXT: super ObjCInterface{{.*}} 'A' // CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCImplementation' // CHECK-NEXT: CXXCtorInitializer{{.*}} 'X' // CHECK-NEXT: CXXConstructExpr // CHECK-NEXT: ObjCIvarDecl{{.*}} X // CHECK-NEXT: ObjCMethodDecl{{.*}} foo // @() boxing expressions. template struct BoxingTest { static id box(T value) { return @(value); } }; // CHECK: ObjCBoxedExpr{{.*}} ''{{$}} struct Test { void f() { ^{ this->yada(); }(); // CHECK: ExprWithCleanups {{.*}} 'void' // CHECK-NEXT: cleanup Block // CHECK-NEXT: CallExpr {{.*}} 'void' // CHECK-NEXT: BlockExpr {{.*}} 'void (^)()' // CHECK-NEXT: BlockDecl {{.*}} col:5 captures_this // CHECK-NEXT: CompoundStmt {{.*}} // CHECK-NEXT: CXXMemberCallExpr {{.*}} 'void' // CHECK-NEXT: MemberExpr {{.*}} '' ->yada // CHECK-NEXT: CXXThisExpr {{.*}} 'Test *' this } void yada(); };