Skip to content

Commit 6f817b2

Browse files
committed
[BoundsSafety] Update objc test case (NFC)
By separating the check lines containing implicit __single, we explicitly check that attribute-only mode does not contain any implicit __single attributes, while -fbounds-safety does.
1 parent b90e652 commit 6f817b2

File tree

1 file changed

+134
-113
lines changed
  • clang/test/BoundsSafety/AST

1 file changed

+134
-113
lines changed

clang/test/BoundsSafety/AST/objc.m

Lines changed: 134 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// RUN: %clang_cc1 -fbounds-safety -x objective-c -fbounds-attributes-objc-experimental -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 -fbounds-attributes-objc-experimental -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

Comments
 (0)