Clang Project

clang_source_code/test/AST/ast-dump-attr.m
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