// RUN: %clang_cc1 -Wno-unused -fblocks -ast-dump -ast-dump-filter Test %s | 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(); };