| 1 | // 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
|
| 2 |
|
| 3 | @interface NSObject
|
| 4 | @end
|
| 5 |
|
| 6 | [[clang::objc_exception]]
|
| 7 | @interface Test1 {
|
| 8 | // CHECK: ObjCInterfaceDecl{{.*}} Test1
|
| 9 | // CHECK-NEXT: ObjCExceptionAttr{{.*}}
|
| 10 | [[clang::iboutlet]] NSObject *Test2;
|
| 11 | // CHECK: ObjCIvarDecl{{.*}} Test2
|
| 12 | // CHECK-NEXT: IBOutletAttr
|
| 13 | }
|
| 14 | @property (readonly) [[clang::objc_returns_inner_pointer]] void *Test3, *Test4;
|
| 15 | // CHECK: ObjCPropertyDecl{{.*}} Test3 'void *' readonly
|
| 16 | // CHECK-NEXT: ObjCReturnsInnerPointerAttr
|
| 17 | // CHECK-NEXT: ObjCPropertyDecl{{.*}} Test4 'void *' readonly
|
| 18 | // CHECK-NEXT: ObjCReturnsInnerPointerAttr
|
| 19 |
|
| 20 | @property (readonly) [[clang::iboutlet]] NSObject *Test5;
|
| 21 | // CHECK: ObjCPropertyDecl{{.*}} Test5 'NSObject *' readonly
|
| 22 | // CHECK-NEXT: IBOutletAttr
|
| 23 |
|
| 24 | // CHECK: ObjCMethodDecl{{.*}} implicit{{.*}} Test3
|
| 25 | // CHECK-NEXT: ObjCReturnsInnerPointerAttr
|
| 26 | // CHECK: ObjCMethodDecl{{.*}} implicit{{.*}} Test4
|
| 27 | // CHECK-NEXT: ObjCReturnsInnerPointerAttr
|
| 28 | // CHECK: ObjCMethodDecl{{.*}} implicit{{.*}} Test5
|
| 29 | // CHECK-NOT: IBOutletAttr
|
| 30 | @end
|
| 31 |
|
| 32 | [[clang::objc_runtime_name("name")]] @protocol Test6;
|
| 33 | // CHECK: ObjCProtocolDecl{{.*}} Test6
|
| 34 | // CHECK-NEXT: ObjCRuntimeNameAttr{{.*}} "name"
|
| 35 |
|
| 36 | [[clang::objc_protocol_requires_explicit_implementation]]
|
| 37 | @protocol Test7
|
| 38 | // CHECK: ObjCProtocolDecl{{.*}} Test7
|
| 39 | // CHECK-NEXT: ObjCExplicitProtocolImplAttr
|
| 40 | @end
|
| 41 |
|
| 42 | @interface Test8
|
| 43 | // CHECK: ObjCInterfaceDecl{{.*}} Test8
|
| 44 | -(void)Test9 [[clang::ns_consumes_self]];
|
| 45 | // CHECK: ObjCMethodDecl{{.*}} Test9 'void'
|
| 46 | // CHECK-NEXT: NSConsumesSelfAttr
|
| 47 | -(void) [[clang::ns_consumes_self]] Test10: (int)Test11;
|
| 48 | // CHECK: ObjCMethodDecl{{.*}} Test10: 'void'
|
| 49 | // CHECK-NEXT: |-ParmVarDecl{{.*}} Test11 'int'
|
| 50 | // CHECK-NEXT: `-NSConsumesSelfAttr
|
| 51 | -(void)Test12: (int *) [[clang::noescape]] Test13 to:(int)Test14 [[clang::ns_consumes_self]];
|
| 52 | // CHECK: ObjCMethodDecl{{.*}} Test12:to: 'void'
|
| 53 | // CHECK-NEXT: |-ParmVarDecl{{.*}} Test13 'int *'
|
| 54 | // CHECK-NEXT: | `-NoEscapeAttr
|
| 55 | // CHECK-NEXT: |-ParmVarDecl{{.*}} Test14 'int'
|
| 56 | // CHECK-NEXT: `-NSConsumesSelfAttr
|
| 57 | @end
|
| 58 | |