annotate clang/test/Sema/warn-documentation.m @ 207:2e18cbf3894f

LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Jun 2021 06:07:14 +0900
parents 0572611fdcc8
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-objc-root-class -Wdocumentation -Wdocumentation-pedantic -verify %s
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
2 // RUN: %clang_cc1 -xobjective-c++ -fsyntax-only -fblocks -Wno-objc-root-class -Wdocumentation -Wdocumentation-pedantic -verify %s
150
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 @class NSString;
anatofuz
parents:
diff changeset
5
anatofuz
parents:
diff changeset
6 // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
anatofuz
parents:
diff changeset
7 /// \brief\author Aaa
anatofuz
parents:
diff changeset
8 @interface Test1
anatofuz
parents:
diff changeset
9 // expected-warning@+2 {{empty paragraph passed to '\brief' command}}
anatofuz
parents:
diff changeset
10 /**
anatofuz
parents:
diff changeset
11 * \brief\author Aaa
anatofuz
parents:
diff changeset
12 * \param aaa Aaa
anatofuz
parents:
diff changeset
13 * \param bbb Bbb
anatofuz
parents:
diff changeset
14 */
anatofuz
parents:
diff changeset
15 + (NSString *)test1:(NSString *)aaa suffix:(NSString *)bbb;
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 // expected-warning@+2 {{parameter 'aab' not found in the function declaration}} expected-note@+2 {{did you mean 'aaa'?}}
anatofuz
parents:
diff changeset
18 /**
anatofuz
parents:
diff changeset
19 * \param aab Aaa
anatofuz
parents:
diff changeset
20 */
anatofuz
parents:
diff changeset
21 + (NSString *)test2:(NSString *)aaa;
anatofuz
parents:
diff changeset
22
anatofuz
parents:
diff changeset
23 // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
anatofuz
parents:
diff changeset
24 /// \brief\author Aaa
anatofuz
parents:
diff changeset
25 @property int test3; // a property: ObjCPropertyDecl
anatofuz
parents:
diff changeset
26
anatofuz
parents:
diff changeset
27 // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
anatofuz
parents:
diff changeset
28 /// \brief\author Aaa
anatofuz
parents:
diff changeset
29 @property int test4; // a property: ObjCPropertyDecl
anatofuz
parents:
diff changeset
30 @end
anatofuz
parents:
diff changeset
31
anatofuz
parents:
diff changeset
32 // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
anatofuz
parents:
diff changeset
33 /// \brief\author Aaa
anatofuz
parents:
diff changeset
34 @interface Test1()
anatofuz
parents:
diff changeset
35 @end
anatofuz
parents:
diff changeset
36
anatofuz
parents:
diff changeset
37 // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
anatofuz
parents:
diff changeset
38 /// \brief\author Aaa
anatofuz
parents:
diff changeset
39 @implementation Test1 // a class implementation : ObjCImplementationDecl
anatofuz
parents:
diff changeset
40 + (NSString *)test1:(NSString *)aaa suffix:(NSString *)bbb {
anatofuz
parents:
diff changeset
41 return 0;
anatofuz
parents:
diff changeset
42 }
anatofuz
parents:
diff changeset
43
anatofuz
parents:
diff changeset
44 + (NSString *)test2:(NSString *)aaa {
anatofuz
parents:
diff changeset
45 return 0;
anatofuz
parents:
diff changeset
46 }
anatofuz
parents:
diff changeset
47
anatofuz
parents:
diff changeset
48 @synthesize test3; // a property implementation: ObjCPropertyImplDecl
anatofuz
parents:
diff changeset
49 @dynamic test4; // a property implementation: ObjCPropertyImplDecl
anatofuz
parents:
diff changeset
50
anatofuz
parents:
diff changeset
51 // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
anatofuz
parents:
diff changeset
52 /// \brief\author Aaa
anatofuz
parents:
diff changeset
53 NSString *_test5;
anatofuz
parents:
diff changeset
54 @end
anatofuz
parents:
diff changeset
55
anatofuz
parents:
diff changeset
56 // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
anatofuz
parents:
diff changeset
57 /// \brief\author Aaa
anatofuz
parents:
diff changeset
58 @interface Test1(Test1Category) // a category: ObjCCategoryDecl
anatofuz
parents:
diff changeset
59 // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
anatofuz
parents:
diff changeset
60 /// \brief\author Aaa
anatofuz
parents:
diff changeset
61 + (NSString *)test3:(NSString *)aaa;
anatofuz
parents:
diff changeset
62 @end
anatofuz
parents:
diff changeset
63
anatofuz
parents:
diff changeset
64 // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
anatofuz
parents:
diff changeset
65 /// \brief\author Aaa
anatofuz
parents:
diff changeset
66 @implementation Test1(Test1Category) // a category implementation: ObjCCategoryImplDecl
anatofuz
parents:
diff changeset
67 + (NSString *)test3:(NSString *)aaa {
anatofuz
parents:
diff changeset
68 return 0;
anatofuz
parents:
diff changeset
69 }
anatofuz
parents:
diff changeset
70 @end
anatofuz
parents:
diff changeset
71
anatofuz
parents:
diff changeset
72 // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
anatofuz
parents:
diff changeset
73 /// \brief\author Aaa
anatofuz
parents:
diff changeset
74 @protocol TestProto1 // a protocol: ObjCProtocolDecl
anatofuz
parents:
diff changeset
75 @end
anatofuz
parents:
diff changeset
76
anatofuz
parents:
diff changeset
77 int a;
anatofuz
parents:
diff changeset
78
anatofuz
parents:
diff changeset
79 // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
anatofuz
parents:
diff changeset
80 /// \brief\author Aaa
anatofuz
parents:
diff changeset
81 @interface Test4
anatofuz
parents:
diff changeset
82 @end
anatofuz
parents:
diff changeset
83
anatofuz
parents:
diff changeset
84 int b;
anatofuz
parents:
diff changeset
85
anatofuz
parents:
diff changeset
86 @interface TestReturns1
anatofuz
parents:
diff changeset
87 /// \returns Aaa
anatofuz
parents:
diff changeset
88 - (int)test1:(NSString *)aaa;
anatofuz
parents:
diff changeset
89
anatofuz
parents:
diff changeset
90 // expected-warning@+1 {{'\returns' command used in a comment that is attached to a method returning void}}
anatofuz
parents:
diff changeset
91 /// \returns Aaa
anatofuz
parents:
diff changeset
92 - (void)test2:(NSString *)aaa;
anatofuz
parents:
diff changeset
93 @end
anatofuz
parents:
diff changeset
94
anatofuz
parents:
diff changeset
95 // expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}}
anatofuz
parents:
diff changeset
96 /// \param aaa Meow.
anatofuz
parents:
diff changeset
97 /// \param bbb Bbb.
anatofuz
parents:
diff changeset
98 /// \returns aaa.
anatofuz
parents:
diff changeset
99 typedef int (^test_param1)(int aaa, int ccc);
anatofuz
parents:
diff changeset
100
anatofuz
parents:
diff changeset
101 // rdar://13094352
anatofuz
parents:
diff changeset
102 // expected-warning@+2 {{'@method' command should be used in a comment attached to an Objective-C method declaration}}
anatofuz
parents:
diff changeset
103 @interface I
anatofuz
parents:
diff changeset
104 /*! @method Base64EncodeEx
anatofuz
parents:
diff changeset
105 */
anatofuz
parents:
diff changeset
106 typedef id ID;
anatofuz
parents:
diff changeset
107 - (unsigned) Base64EncodeEx : (ID)Arg;
anatofuz
parents:
diff changeset
108 @end
anatofuz
parents:
diff changeset
109
anatofuz
parents:
diff changeset
110 // rdar://12379114
anatofuz
parents:
diff changeset
111 // expected-warning@+5 {{'@interface' command should not be used in a comment attached to a non-interface declaration}}
anatofuz
parents:
diff changeset
112 // expected-warning@+5 {{'@classdesign' command should not be used in a comment attached to a non-container declaration}}
anatofuz
parents:
diff changeset
113 // expected-warning@+5 {{'@coclass' command should not be used in a comment attached to a non-container declaration}}
anatofuz
parents:
diff changeset
114 @interface NSObject @end
anatofuz
parents:
diff changeset
115 /*!
anatofuz
parents:
diff changeset
116 @interface IOCommandGate
anatofuz
parents:
diff changeset
117 @classdesign Multiple paragraphs go here.
anatofuz
parents:
diff changeset
118 @coclass myCoClass
anatofuz
parents:
diff changeset
119 */
anatofuz
parents:
diff changeset
120
anatofuz
parents:
diff changeset
121 typedef id OBJ;
anatofuz
parents:
diff changeset
122 @interface IOCommandGate : NSObject {
anatofuz
parents:
diff changeset
123 OBJ iv;
anatofuz
parents:
diff changeset
124 }
anatofuz
parents:
diff changeset
125 @end
anatofuz
parents:
diff changeset
126
anatofuz
parents:
diff changeset
127 // rdar://12379114
anatofuz
parents:
diff changeset
128 // expected-warning@+4 {{'@methodgroup' command should be used in a comment attached to an Objective-C method declaration}}
anatofuz
parents:
diff changeset
129 // expected-warning@+6 {{'@method' command should be used in a comment attached to an Objective-C method declaratio}}
anatofuz
parents:
diff changeset
130 @interface rdar12379114
anatofuz
parents:
diff changeset
131 /*!
anatofuz
parents:
diff changeset
132 @methodgroup Creating a request
anatofuz
parents:
diff changeset
133 */
anatofuz
parents:
diff changeset
134 /*!
anatofuz
parents:
diff changeset
135 @method initWithTimeout is the 2nd method
anatofuz
parents:
diff changeset
136 */
anatofuz
parents:
diff changeset
137 typedef unsigned int NSTimeInterval;
anatofuz
parents:
diff changeset
138 - (id)initWithTimeout:(NSTimeInterval)timeout;
anatofuz
parents:
diff changeset
139 @end
anatofuz
parents:
diff changeset
140
anatofuz
parents:
diff changeset
141 // expected-warning@+2 {{'@protocol' command should not be used in a comment attached to a non-protocol declaration}}
anatofuz
parents:
diff changeset
142 /*!
anatofuz
parents:
diff changeset
143 @protocol PROTO
anatofuz
parents:
diff changeset
144 */
anatofuz
parents:
diff changeset
145 struct S;
anatofuz
parents:
diff changeset
146
anatofuz
parents:
diff changeset
147 /*!
anatofuz
parents:
diff changeset
148 @interface NSArray This is an array
anatofuz
parents:
diff changeset
149 */
anatofuz
parents:
diff changeset
150 @class NSArray;
anatofuz
parents:
diff changeset
151 @interface NSArray @end
anatofuz
parents:
diff changeset
152
anatofuz
parents:
diff changeset
153 // expected-warning@+3 {{unknown command tag name}}
anatofuz
parents:
diff changeset
154 /*!
anatofuz
parents:
diff changeset
155 @interface NSMutableArray
anatofuz
parents:
diff changeset
156 @super NSArray
anatofuz
parents:
diff changeset
157 */
anatofuz
parents:
diff changeset
158 @interface NSMutableArray : NSArray @end
anatofuz
parents:
diff changeset
159
anatofuz
parents:
diff changeset
160 /*!
anatofuz
parents:
diff changeset
161 @protocol MyProto
anatofuz
parents:
diff changeset
162 */
anatofuz
parents:
diff changeset
163 @protocol MyProto @end
anatofuz
parents:
diff changeset
164
anatofuz
parents:
diff changeset
165 // expected-warning@+2 {{'@protocol' command should not be used in a comment attached to a non-protocol declaration}}
anatofuz
parents:
diff changeset
166 /*!
anatofuz
parents:
diff changeset
167 @protocol MyProto
anatofuz
parents:
diff changeset
168 */
anatofuz
parents:
diff changeset
169 @interface INTF <MyProto> @end
anatofuz
parents:
diff changeset
170
anatofuz
parents:
diff changeset
171 // expected-warning@+2 {{'@struct' command should not be used in a comment attached to a non-struct declaration}}
anatofuz
parents:
diff changeset
172 /*!
anatofuz
parents:
diff changeset
173 @struct S1 THIS IS IT
anatofuz
parents:
diff changeset
174 */
anatofuz
parents:
diff changeset
175 @interface S1 @end
anatofuz
parents:
diff changeset
176
anatofuz
parents:
diff changeset
177 // expected-warning@+1 {{unknown command tag name}}
anatofuz
parents:
diff changeset
178 /// \t bbb IS_DOXYGEN_END
anatofuz
parents:
diff changeset
179 int FooBar();
anatofuz
parents:
diff changeset
180
anatofuz
parents:
diff changeset
181 // rdar://13836387
anatofuz
parents:
diff changeset
182 /** \brief Module handling the incoming notifications from the system.
anatofuz
parents:
diff changeset
183 *
anatofuz
parents:
diff changeset
184 * This includes:
anatofuz
parents:
diff changeset
185 * - Network Reachability
anatofuz
parents:
diff changeset
186 * - Power State
anatofuz
parents:
diff changeset
187 * - Low Disk
anatofuz
parents:
diff changeset
188 */
anatofuz
parents:
diff changeset
189 @interface BRC : NSObject
anatofuz
parents:
diff changeset
190 - (void)removeReach:(NSObject*)observer;
anatofuz
parents:
diff changeset
191 @end
anatofuz
parents:
diff changeset
192
anatofuz
parents:
diff changeset
193 @implementation BRC : NSObject
anatofuz
parents:
diff changeset
194 - (void)removeReach:(NSObject*)observer // expected-note {{previous declaration is here}}
anatofuz
parents:
diff changeset
195 {
anatofuz
parents:
diff changeset
196 }
anatofuz
parents:
diff changeset
197 - (void)removeReach:(NSObject*)observer // expected-error {{duplicate declaration of method 'removeReach:'}}
anatofuz
parents:
diff changeset
198 {
anatofuz
parents:
diff changeset
199 }
anatofuz
parents:
diff changeset
200 @end
anatofuz
parents:
diff changeset
201
anatofuz
parents:
diff changeset
202 // rdar://13927330
anatofuz
parents:
diff changeset
203 /// @class Asset <- '@class' may be used in a comment attached to a an interface declaration
anatofuz
parents:
diff changeset
204 @interface Asset : NSObject
anatofuz
parents:
diff changeset
205 @end
anatofuz
parents:
diff changeset
206
anatofuz
parents:
diff changeset
207 // rdar://14024851 Check that this does not enter an infinite loop
anatofuz
parents:
diff changeset
208 @interface rdar14024851
anatofuz
parents:
diff changeset
209 -(void)meth; // expected-note {{declared here}}
anatofuz
parents:
diff changeset
210 @end
anatofuz
parents:
diff changeset
211
anatofuz
parents:
diff changeset
212 @implementation rdar14024851 // expected-warning {{method definition for 'meth' not found}} expected-note {{previous definition}}
anatofuz
parents:
diff changeset
213 @end
anatofuz
parents:
diff changeset
214
anatofuz
parents:
diff changeset
215 @implementation rdar14024851 // expected-error {{reimplementation}}
anatofuz
parents:
diff changeset
216 /// \brief comment
anatofuz
parents:
diff changeset
217 -(void)meth {}
anatofuz
parents:
diff changeset
218 @end
anatofuz
parents:
diff changeset
219
anatofuz
parents:
diff changeset
220 // rdar://14124644
anatofuz
parents:
diff changeset
221 @interface test_vararg1
anatofuz
parents:
diff changeset
222 /// @param[in] arg something
anatofuz
parents:
diff changeset
223 /// @param[in] ... This is vararg
anatofuz
parents:
diff changeset
224 - (void) VarArgMeth : (id)arg, ...;
anatofuz
parents:
diff changeset
225 @end
anatofuz
parents:
diff changeset
226
anatofuz
parents:
diff changeset
227 @implementation test_vararg1
anatofuz
parents:
diff changeset
228 /// @param[in] arg something
anatofuz
parents:
diff changeset
229 /// @param[in] ... This is vararg
anatofuz
parents:
diff changeset
230 - (void) VarArgMeth : (id)arg, ... {}
anatofuz
parents:
diff changeset
231 @end
anatofuz
parents:
diff changeset
232
anatofuz
parents:
diff changeset
233 /**
anatofuz
parents:
diff changeset
234 * blockPointerVariable
anatofuz
parents:
diff changeset
235 *
anatofuz
parents:
diff changeset
236 * @param i is integer.
anatofuz
parents:
diff changeset
237 * @returns integer.
anatofuz
parents:
diff changeset
238 */
anatofuz
parents:
diff changeset
239 int (^blockPointerVariable)(int i);
anatofuz
parents:
diff changeset
240
anatofuz
parents:
diff changeset
241 struct HasFields {
anatofuz
parents:
diff changeset
242 /**
anatofuz
parents:
diff changeset
243 * blockPointerField
anatofuz
parents:
diff changeset
244 *
anatofuz
parents:
diff changeset
245 * \param i is integer.
anatofuz
parents:
diff changeset
246 * \returns integer.
anatofuz
parents:
diff changeset
247 */
anatofuz
parents:
diff changeset
248 int (^blockPointerFields)(int i);
anatofuz
parents:
diff changeset
249 };
anatofuz
parents:
diff changeset
250
anatofuz
parents:
diff changeset
251 // expected-warning@+5 {{'\returns' command used in a comment that is attached to a function returning void}}
anatofuz
parents:
diff changeset
252 /**
anatofuz
parents:
diff changeset
253 * functionPointerVariable
anatofuz
parents:
diff changeset
254 *
anatofuz
parents:
diff changeset
255 * \param p not here.
anatofuz
parents:
diff changeset
256 * \returns integer.
anatofuz
parents:
diff changeset
257 */
anatofuz
parents:
diff changeset
258 void (^_Nullable blockPointerVariableThatLeadsNowhere)();
anatofuz
parents:
diff changeset
259
anatofuz
parents:
diff changeset
260 @interface CheckFunctionBlockPointerVars {
anatofuz
parents:
diff changeset
261 /**
anatofuz
parents:
diff changeset
262 * functionPointerIVar
anatofuz
parents:
diff changeset
263 *
anatofuz
parents:
diff changeset
264 * @param i is integer.
anatofuz
parents:
diff changeset
265 * @returns integer.
anatofuz
parents:
diff changeset
266 */
anatofuz
parents:
diff changeset
267 int (*functionPointerIVar)(int i);
anatofuz
parents:
diff changeset
268
anatofuz
parents:
diff changeset
269 /**
anatofuz
parents:
diff changeset
270 * blockPointerIVar
anatofuz
parents:
diff changeset
271 *
anatofuz
parents:
diff changeset
272 * \param i is integer.
anatofuz
parents:
diff changeset
273 * \returns integer.
anatofuz
parents:
diff changeset
274 */
anatofuz
parents:
diff changeset
275 int (^blockPointerIVar)(int i);
anatofuz
parents:
diff changeset
276 }
anatofuz
parents:
diff changeset
277
anatofuz
parents:
diff changeset
278 /**
anatofuz
parents:
diff changeset
279 * functionPointerProperty
anatofuz
parents:
diff changeset
280 *
anatofuz
parents:
diff changeset
281 * @param i is integer.
anatofuz
parents:
diff changeset
282 * @returns integer.
anatofuz
parents:
diff changeset
283 */
anatofuz
parents:
diff changeset
284 @property int (*functionPointerProperty)(int i);
anatofuz
parents:
diff changeset
285
anatofuz
parents:
diff changeset
286 /**
anatofuz
parents:
diff changeset
287 * blockPointerProperty
anatofuz
parents:
diff changeset
288 *
anatofuz
parents:
diff changeset
289 * \param i is integer.
anatofuz
parents:
diff changeset
290 * \returns integer.
anatofuz
parents:
diff changeset
291 */
anatofuz
parents:
diff changeset
292 @property int (^blockPointerProperty)(int i);
anatofuz
parents:
diff changeset
293
anatofuz
parents:
diff changeset
294 /**
anatofuz
parents:
diff changeset
295 * blockReturnsNothing
anatofuz
parents:
diff changeset
296 *
anatofuz
parents:
diff changeset
297 * \returns Nothing, but can allow this as this pattern is used to document the
anatofuz
parents:
diff changeset
298 * value that the property getter returns.
anatofuz
parents:
diff changeset
299 */
anatofuz
parents:
diff changeset
300 @property void (^blockReturnsNothing)();
anatofuz
parents:
diff changeset
301
anatofuz
parents:
diff changeset
302 @end
anatofuz
parents:
diff changeset
303
anatofuz
parents:
diff changeset
304 /*!
anatofuz
parents:
diff changeset
305 * Block typedef with variadic params.
anatofuz
parents:
diff changeset
306 *
anatofuz
parents:
diff changeset
307 * @param a
anatofuz
parents:
diff changeset
308 * works
anatofuz
parents:
diff changeset
309 *
anatofuz
parents:
diff changeset
310 * @param ...
anatofuz
parents:
diff changeset
311 * now should work too.
anatofuz
parents:
diff changeset
312 */
anatofuz
parents:
diff changeset
313 typedef void (^VariadicBlockType)(int a, ...);
anatofuz
parents:
diff changeset
314
anatofuz
parents:
diff changeset
315 // PR42844 - Assertion failures when using typedefed block pointers
anatofuz
parents:
diff changeset
316 typedef void(^VoidBlockType)();
anatofuz
parents:
diff changeset
317 typedef VoidBlockType VoidBlockTypeCall();
anatofuz
parents:
diff changeset
318 VoidBlockTypeCall *d; ///< \return none
anatofuz
parents:
diff changeset
319 // expected-warning@-1 {{'\return' command used in a comment that is not attached to a function or method declaration}}
anatofuz
parents:
diff changeset
320 VoidBlockTypeCall ^e; ///< \return none
anatofuz
parents:
diff changeset
321 // expected-warning@-1 {{'\return' command used in a comment that is not attached to a function or method declaration}}
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
322
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
323 #ifdef __cplusplus
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
324 @interface HasAnonNamespace @end
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
325 @implementation HasAnonNamespace
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
326 namespace {}
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
327 @end
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
328 #endif