1- // RUN: %clang_cc1 -fbounds-safety -x objective-c -fexperimental-bounds-safety-objc -Wno-deprecated-declarations -Wno-return-type -Wno-objc-root-class -ast-dump %s 2>&1 | FileCheck %s
2- // RUN: %clang_cc1 -fexperimental-bounds-safety-attributes -x objective-c -Wno-deprecated-declarations -Wno-return-type -Wno-objc-root-class -ast-dump %s 2>&1 | FileCheck %s
1+ // RUN: %clang_cc1 -fbounds-safety -x objective-c -fexperimental-bounds-safety-objc -Wno-deprecated-declarations -Wno-return-type -Wno-objc-root-class -ast-dump %s 2>&1 | FileCheck --check-prefixes=COMMON-CHECK,BOUNDS-CHECK %s
2+ // RUN: %clang_cc1 -fexperimental-bounds-safety-attributes -x objective-c -Wno-deprecated-declarations -Wno-return-type -Wno-objc-root-class -ast-dump %s 2>&1 | FileCheck --check-prefixes=COMMON-CHECK,ATTR-CHECK %s
33
44#include < ptrcheck.h>
55
@@ -15,35 +15,42 @@ - (void)cParam:(int)len, int * __counted_by(len) p;
1515 - (void )reverseCParam:(int * __counted_by (len))p, int len;
1616@end
1717
18- // CHECK-LABEL: -ObjCProtocolDecl {{.*}} CountedByProtocol
19- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleParam:: 'void'
20- // CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
21- // CHECK-NOT: IsDeref
22- // CHECK-NEXT: | | `-DependerDeclsAttr
23- // CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
24- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - reverseParam:: 'void'
25- // CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
26- // CHECK-NEXT: | `-ParmVarDecl {{.*}} len 'int'
27- // CHECK-NOT: IsDeref
28- // CHECK-NEXT: | `-DependerDeclsAttr
29- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedParam:: 'void'
30- // CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int *'
31- // CHECK-NEXT: | | `-DependerDeclsAttr {{.*}} IsDeref
32- // CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(*len)':'int *{{(__single)?}}'
33- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleRet: 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
34- // CHECK-NEXT: | `-ParmVarDecl {{.*}} len 'int'
35- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedRet: 'int *{{(__single)?}} __counted_by(*len)':'int *{{(__single)?}}'
36- // CHECK-NEXT: | `-ParmVarDecl {{.*}} len 'int *'
37- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - cParam: 'void'
38- // CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
39- // CHECK-NOT: IsDeref
40- // CHECK-NEXT: | | `-DependerDeclsAttr
41- // CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
42- // CHECK-NEXT: `-ObjCMethodDecl {{.*}} - reverseCParam: 'void'
43- // CHECK-NEXT: |-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
44- // CHECK-NEXT: `-ParmVarDecl {{.*}} len 'int'
45- // CHECK-NOT: IsDeref
46- // CHECK-NEXT: `-DependerDeclsAttr
18+ // COMMON-CHECK-LABEL: -ObjCProtocolDecl {{.*}} CountedByProtocol
19+ // COMMON-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleParam:: 'void'
20+ // COMMON-CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
21+ // COMMON-CHECK-NOT: IsDeref
22+ // COMMON-CHECK-NEXT: | | `-DependerDeclsAttr
23+ // BOUNDS-CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int *__single __counted_by(len)':'int *__single'
24+ // ATTR-CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int * __counted_by(len)':'int *'
25+ // COMMON-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - reverseParam:: 'void'
26+ // BOUNDS-CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int *__single __counted_by(len)':'int *__single'
27+ // ATTR-CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int * __counted_by(len)':'int *'
28+ // COMMON-CHECK-NEXT: | `-ParmVarDecl {{.*}} len 'int'
29+ // COMMON-CHECK-NOT: IsDeref
30+ // COMMON-CHECK-NEXT: | `-DependerDeclsAttr
31+ // COMMON-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedParam:: 'void'
32+ // COMMON-CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int *'
33+ // COMMON-CHECK-NEXT: | | `-DependerDeclsAttr {{.*}} IsDeref
34+ // BOUNDS-CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int *__single __counted_by(*len)':'int *__single'
35+ // ATTR-CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int * __counted_by(*len)':'int *'
36+ // BOUNDS-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleRet: 'int *__single __counted_by(len)':'int *__single'
37+ // ATTR-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleRet: 'int * __counted_by(len)':'int *'
38+ // COMMON-CHECK-NEXT: | `-ParmVarDecl {{.*}} len 'int'
39+ // BOUNDS-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedRet: 'int *__single __counted_by(*len)':'int *__single'
40+ // ATTR-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedRet: 'int * __counted_by(*len)':'int *'
41+ // COMMON-CHECK-NEXT: | `-ParmVarDecl {{.*}} len 'int *'
42+ // COMMON-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - cParam: 'void'
43+ // COMMON-CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
44+ // COMMON-CHECK-NOT: IsDeref
45+ // COMMON-CHECK-NEXT: | | `-DependerDeclsAttr
46+ // BOUNDS-CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int *__single __counted_by(len)':'int *__single'
47+ // ATTR-CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int * __counted_by(len)':'int *'
48+ // COMMON-CHECK-NEXT: `-ObjCMethodDecl {{.*}} - reverseCParam: 'void'
49+ // BOUNDS-CHECK-NEXT: |-ParmVarDecl {{.*}} p 'int *__single __counted_by(len)':'int *__single'
50+ // ATTR-CHECK-NEXT: |-ParmVarDecl {{.*}} p 'int * __counted_by(len)':'int *'
51+ // COMMON-CHECK-NEXT: `-ParmVarDecl {{.*}} len 'int'
52+ // COMMON-CHECK-NOT: IsDeref
53+ // COMMON-CHECK-NEXT: `-DependerDeclsAttr
4754
4855@interface CountedByClass <CountedByProtocol>
4956 - (void )simpleParam:(int )len :(int * __counted_by (len))p;
@@ -57,37 +64,44 @@ - (void)cParam:(int)len, int * __counted_by(len) p;
5764 - (void )reverseCParam:(int * __counted_by (len))p, int len;
5865@end
5966
60- // CHECK-LABEL: -ObjCInterfaceDecl {{.*}} CountedByClass
61- // CHECK-NEXT: |-ObjCImplementation {{.*}} 'CountedByClass'
62- // CHECK-NEXT: |-ObjCProtocol {{.*}} 'CountedByProtocol'
63- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleParam:: 'void'
64- // CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
65- // CHECK-NOT: IsDeref
66- // CHECK-NEXT: | | `-DependerDeclsAttr
67- // CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
68- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - reverseParam:: 'void'
69- // CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
70- // CHECK-NEXT: | `-ParmVarDecl {{.*}} len 'int'
71- // CHECK-NOT: IsDeref
72- // CHECK-NEXT: | `-DependerDeclsAttr
73- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedParam:: 'void'
74- // CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int *'
75- // CHECK-NEXT: | | `-DependerDeclsAttr {{.*}} IsDeref
76- // CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(*len)':'int *{{(__single)?}}'
77- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleRet: 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
78- // CHECK-NEXT: | `-ParmVarDecl {{.*}} len 'int'
79- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedRet: 'int *{{(__single)?}} __counted_by(*len)':'int *{{(__single)?}}'
80- // CHECK-NEXT: | `-ParmVarDecl {{.*}} len 'int *'
81- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - cParam: 'void'
82- // CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
83- // CHECK-NOT: IsDeref
84- // CHECK-NEXT: | | `-DependerDeclsAttr
85- // CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
86- // CHECK-NEXT: `-ObjCMethodDecl {{.*}} - reverseCParam: 'void'
87- // CHECK-NEXT: |-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
88- // CHECK-NEXT: `-ParmVarDecl {{.*}} len 'int'
89- // CHECK-NOT: IsDeref
90- // CHECK-NEXT: `-DependerDeclsAttr
67+ // COMMON-CHECK-LABEL: -ObjCInterfaceDecl {{.*}} CountedByClass
68+ // COMMON-CHECK-NEXT: |-ObjCImplementation {{.*}} 'CountedByClass'
69+ // COMMON-CHECK-NEXT: |-ObjCProtocol {{.*}} 'CountedByProtocol'
70+ // COMMON-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleParam:: 'void'
71+ // COMMON-CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
72+ // COMMON-CHECK-NOT: IsDeref
73+ // COMMON-CHECK-NEXT: | | `-DependerDeclsAttr
74+ // BOUNDS-CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int *__single __counted_by(len)':'int *__single'
75+ // ATTR-CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int * __counted_by(len)':'int *'
76+ // COMMON-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - reverseParam:: 'void'
77+ // BOUNDS-CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int *__single __counted_by(len)':'int *__single'
78+ // ATTR-CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int * __counted_by(len)':'int *'
79+ // COMMON-CHECK-NEXT: | `-ParmVarDecl {{.*}} len 'int'
80+ // COMMON-CHECK-NOT: IsDeref
81+ // COMMON-CHECK-NEXT: | `-DependerDeclsAttr
82+ // COMMON-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedParam:: 'void'
83+ // COMMON-CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int *'
84+ // COMMON-CHECK-NEXT: | | `-DependerDeclsAttr {{.*}} IsDeref
85+ // BOUNDS-CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int *__single __counted_by(*len)':'int *__single'
86+ // ATTR-CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int * __counted_by(*len)':'int *'
87+ // BOUNDS-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleRet: 'int *__single __counted_by(len)':'int *__single'
88+ // ATTR-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleRet: 'int * __counted_by(len)':'int *'
89+ // COMMON-CHECK-NEXT: | `-ParmVarDecl {{.*}} len 'int'
90+ // BOUNDS-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedRet: 'int *__single __counted_by(*len)':'int *__single'
91+ // ATTR-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedRet: 'int * __counted_by(*len)':'int *'
92+ // COMMON-CHECK-NEXT: | `-ParmVarDecl {{.*}} len 'int *'
93+ // COMMON-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - cParam: 'void'
94+ // COMMON-CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
95+ // COMMON-CHECK-NOT: IsDeref
96+ // COMMON-CHECK-NEXT: | | `-DependerDeclsAttr
97+ // BOUNDS-CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int *__single __counted_by(len)':'int *__single'
98+ // ATTR-CHECK-NEXT: | `-ParmVarDecl {{.*}} p 'int * __counted_by(len)':'int *'
99+ // COMMON-CHECK-NEXT: `-ObjCMethodDecl {{.*}} - reverseCParam: 'void'
100+ // BOUNDS-CHECK-NEXT: |-ParmVarDecl {{.*}} p 'int *__single __counted_by(len)':'int *__single'
101+ // ATTR-CHECK-NEXT: |-ParmVarDecl {{.*}} p 'int * __counted_by(len)':'int *'
102+ // COMMON-CHECK-NEXT: `-ParmVarDecl {{.*}} len 'int'
103+ // COMMON-CHECK-NOT: IsDeref
104+ // COMMON-CHECK-NEXT: `-DependerDeclsAttr
91105
92106@implementation CountedByClass
93107 - (void )simpleParam:(int )len :(int * __counted_by (len))p {}
@@ -101,54 +115,61 @@ - (void)cParam:(int)len, int * __counted_by(len) p {}
101115 - (void )reverseCParam:(int * __counted_by (len))p, int len {}
102116@end
103117
104- // CHECK-LABEL: -ObjCImplementationDecl {{.*}} CountedByClass
105- // CHECK-NEXT: |-ObjCInterface {{.*}} 'CountedByClass'
106- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleParam:: 'void'
107- // CHECK-NEXT: | |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
108- // CHECK-NEXT: | |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
109- // CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
110- // CHECK-NOT: IsDeref
111- // CHECK-NEXT: | | `-DependerDeclsAttr
112- // CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
113- // CHECK-NEXT: | `-CompoundStmt
114- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - reverseParam:: 'void'
115- // CHECK-NEXT: | |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
116- // CHECK-NEXT: | |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
117- // CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
118- // CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
119- // CHECK-NOT: IsDeref
120- // CHECK-NEXT: | `-DependerDeclsAttr
121- // CHECK-NEXT: | `-CompoundStmt
122- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedParam:: 'void'
123- // CHECK-NEXT: | |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
124- // CHECK-NEXT: | |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
125- // CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int *'
126- // CHECK-NEXT: | | `-DependerDeclsAttr {{.*}} IsDeref
127- // CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(*len)':'int *{{(__single)?}}'
128- // CHECK-NEXT: | `-CompoundStmt
129- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleRet: 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
130- // CHECK-NEXT: | |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
131- // CHECK-NEXT: | |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
132- // CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
133- // CHECK-NEXT: | `-CompoundStmt
134- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedRet: 'int *{{(__single)?}} __counted_by(*len)':'int *{{(__single)?}}'
135- // CHECK-NEXT: | |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
136- // CHECK-NEXT: | |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
137- // CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int *'
138- // CHECK-NEXT: | `-CompoundStmt
139- // CHECK-NEXT: |-ObjCMethodDecl {{.*}} - cParam: 'void'
140- // CHECK-NEXT: | |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
141- // CHECK-NEXT: | |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
142- // CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
143- // CHECK-NOT: IsDeref
144- // CHECK-NEXT: | | `-DependerDeclsAttr
145- // CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
146- // CHECK-NEXT: | `-CompoundStmt
147- // CHECK-NEXT: `-ObjCMethodDecl {{.*}} - reverseCParam: 'void'
148- // CHECK-NEXT: |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
149- // CHECK-NEXT: |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
150- // CHECK-NEXT: |-ParmVarDecl {{.*}} p 'int *{{(__single)?}} __counted_by(len)':'int *{{(__single)?}}'
151- // CHECK-NEXT: |-ParmVarDecl {{.*}} len 'int'
152- // CHECK-NOT: IsDeref
153- // CHECK-NEXT: `-DependerDeclsAttr
154- // CHECK-NEXT: `-CompoundStmt
118+ // COMMON-CHECK-LABEL: -ObjCImplementationDecl {{.*}} CountedByClass
119+ // COMMON-CHECK-NEXT: |-ObjCInterface {{.*}} 'CountedByClass'
120+ // COMMON-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleParam:: 'void'
121+ // COMMON-CHECK-NEXT: | |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
122+ // COMMON-CHECK-NEXT: | |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
123+ // COMMON-CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
124+ // COMMON-CHECK-NOT: IsDeref
125+ // COMMON-CHECK-NEXT: | | `-DependerDeclsAttr
126+ // BOUNDS-CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int *__single __counted_by(len)':'int *__single'
127+ // ATTR-CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int * __counted_by(len)':'int *'
128+ // COMMON-CHECK-NEXT: | `-CompoundStmt
129+ // COMMON-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - reverseParam:: 'void'
130+ // COMMON-CHECK-NEXT: | |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
131+ // COMMON-CHECK-NEXT: | |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
132+ // BOUNDS-CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int *__single __counted_by(len)':'int *__single'
133+ // ATTR-CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int * __counted_by(len)':'int *'
134+ // COMMON-CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
135+ // COMMON-CHECK-NOT: IsDeref
136+ // COMMON-CHECK-NEXT: | `-DependerDeclsAttr
137+ // COMMON-CHECK-NEXT: | `-CompoundStmt
138+ // COMMON-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedParam:: 'void'
139+ // COMMON-CHECK-NEXT: | |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
140+ // COMMON-CHECK-NEXT: | |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
141+ // COMMON-CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int *'
142+ // COMMON-CHECK-NEXT: | | `-DependerDeclsAttr {{.*}} IsDeref
143+ // BOUNDS-CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int *__single __counted_by(*len)':'int *__single'
144+ // ATTR-CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int * __counted_by(*len)':'int *'
145+ // COMMON-CHECK-NEXT: | `-CompoundStmt
146+ // BOUNDS-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleRet: 'int *__single __counted_by(len)':'int *__single'
147+ // ATTR-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - simpleRet: 'int * __counted_by(len)':'int *'
148+ // COMMON-CHECK-NEXT: | |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
149+ // COMMON-CHECK-NEXT: | |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
150+ // COMMON-CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
151+ // COMMON-CHECK-NEXT: | `-CompoundStmt
152+ // BOUNDS-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedRet: 'int *__single __counted_by(*len)':'int *__single'
153+ // ATTR-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - nestedRet: 'int * __counted_by(*len)':'int *'
154+ // COMMON-CHECK-NEXT: | |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
155+ // COMMON-CHECK-NEXT: | |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
156+ // COMMON-CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int *'
157+ // COMMON-CHECK-NEXT: | `-CompoundStmt
158+ // COMMON-CHECK-NEXT: |-ObjCMethodDecl {{.*}} - cParam: 'void'
159+ // COMMON-CHECK-NEXT: | |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
160+ // COMMON-CHECK-NEXT: | |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
161+ // COMMON-CHECK-NEXT: | |-ParmVarDecl {{.*}} len 'int'
162+ // COMMON-CHECK-NOT: IsDeref
163+ // COMMON-CHECK-NEXT: | | `-DependerDeclsAttr
164+ // BOUNDS-CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int *__single __counted_by(len)':'int *__single'
165+ // ATTR-CHECK-NEXT: | |-ParmVarDecl {{.*}} p 'int * __counted_by(len)':'int *'
166+ // COMMON-CHECK-NEXT: | `-CompoundStmt
167+ // COMMON-CHECK-NEXT: `-ObjCMethodDecl {{.*}} - reverseCParam: 'void'
168+ // COMMON-CHECK-NEXT: |-ImplicitParamDecl {{.*}} self 'CountedByClass *'
169+ // COMMON-CHECK-NEXT: |-ImplicitParamDecl {{.*}} _cmd 'SEL':'SEL *'
170+ // BOUNDS-CHECK-NEXT: |-ParmVarDecl {{.*}} p 'int *__single __counted_by(len)':'int *__single'
171+ // ATTR-CHECK-NEXT: |-ParmVarDecl {{.*}} p 'int * __counted_by(len)':'int *'
172+ // COMMON-CHECK-NEXT: |-ParmVarDecl {{.*}} len 'int'
173+ // COMMON-CHECK-NOT: IsDeref
174+ // COMMON-CHECK-NEXT: `-DependerDeclsAttr
175+ // COMMON-CHECK-NEXT: `-CompoundStmt
0 commit comments