69 lines
2.6 KiB
Objective-C
69 lines
2.6 KiB
Objective-C
// Test without serialization:
|
|
// RUN: %clang_cc1 -fdouble-square-bracket-attributes -triple x86_64-apple-macosx10.10.0 \
|
|
// RUN: -ast-dump -ast-dump-filter Test %s \
|
|
// RUN: | FileCheck --strict-whitespace %s
|
|
//
|
|
// Test with serialization:
|
|
// RUN: %clang_cc1 -fdouble-square-bracket-attributes -triple x86_64-apple-macosx10.10.0 \
|
|
// RUN: -emit-pch -o %t %s
|
|
// RUN: %clang_cc1 -x objective-c -fdouble-square-bracket-attributes -triple x86_64-apple-macosx10.10.0 \
|
|
// RUN: -include-pch %t -ast-dump-all -ast-dump-filter Test /dev/null \
|
|
// RUN: | sed -e "s/ <undeserialized declarations>//" -e "s/ imported//" \
|
|
// RUN: | 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
|