| // RUN: %clang_cc1 -fdouble-square-bracket-attributes -triple x86_64-apple-macosx10.10.0 -ast-dump -ast-dump-filter Test %s | FileCheck --strict-whitespace %s | |
| @interface NSObject | |
| @end | |
| [[clang::objc_exception]] | |
| @interface Test1 { | |
| // CHECK: ObjCInterfaceDecl{{.*}} Test1 | |
| // CHECK-NEXT: ObjCExceptionAttr{{.*}} | |
| [[clang::iboutlet]] NSObject *Test2; | |
| // CHECK: ObjCIvarDecl{{.*}} Test2 | |
| // CHECK-NEXT: IBOutletAttr | |
| } | |
| @property (readonly) [[clang::objc_returns_inner_pointer]] void *Test3, *Test4; | |
| // CHECK: ObjCPropertyDecl{{.*}} Test3 'void *' readonly | |
| // CHECK-NEXT: ObjCReturnsInnerPointerAttr | |
| // CHECK-NEXT: ObjCPropertyDecl{{.*}} Test4 'void *' readonly | |
| // CHECK-NEXT: ObjCReturnsInnerPointerAttr | |
| @property (readonly) [[clang::iboutlet]] NSObject *Test5; | |
| // CHECK: ObjCPropertyDecl{{.*}} Test5 'NSObject *' readonly | |
| // CHECK-NEXT: IBOutletAttr | |
| // CHECK: ObjCMethodDecl{{.*}} implicit{{.*}} Test3 | |
| // CHECK-NEXT: ObjCReturnsInnerPointerAttr | |
| // CHECK: ObjCMethodDecl{{.*}} implicit{{.*}} Test4 | |
| // CHECK-NEXT: ObjCReturnsInnerPointerAttr | |
| // CHECK: ObjCMethodDecl{{.*}} implicit{{.*}} Test5 | |
| // CHECK-NOT: IBOutletAttr | |
| @end | |
| [[clang::objc_runtime_name("name")]] @protocol Test6; | |
| // CHECK: ObjCProtocolDecl{{.*}} Test6 | |
| // CHECK-NEXT: ObjCRuntimeNameAttr{{.*}} "name" | |
| [[clang::objc_protocol_requires_explicit_implementation]] | |
| @protocol Test7 | |
| // CHECK: ObjCProtocolDecl{{.*}} Test7 | |
| // CHECK-NEXT: ObjCExplicitProtocolImplAttr | |
| @end | |
| @interface Test8 | |
| // CHECK: ObjCInterfaceDecl{{.*}} Test8 | |
| -(void)Test9 [[clang::ns_consumes_self]]; | |
| // CHECK: ObjCMethodDecl{{.*}} Test9 'void' | |
| // CHECK-NEXT: NSConsumesSelfAttr | |
| -(void) [[clang::ns_consumes_self]] Test10: (int)Test11; | |
| // CHECK: ObjCMethodDecl{{.*}} Test10: 'void' | |
| // CHECK-NEXT: |-ParmVarDecl{{.*}} Test11 'int' | |
| // CHECK-NEXT: `-NSConsumesSelfAttr | |
| -(void)Test12: (int *) [[clang::noescape]] Test13 to:(int)Test14 [[clang::ns_consumes_self]]; | |
| // CHECK: ObjCMethodDecl{{.*}} Test12:to: 'void' | |
| // CHECK-NEXT: |-ParmVarDecl{{.*}} Test13 'int *' | |
| // CHECK-NEXT: | `-NoEscapeAttr | |
| // CHECK-NEXT: |-ParmVarDecl{{.*}} Test14 'int' | |
| // CHECK-NEXT: `-NSConsumesSelfAttr | |
| @end |