1 // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-objc-root-class -Wdocumentation -Wdocumentation-pedantic -verify %s 2 3 @class NSString; 4 5 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 6 /// \brief\author Aaa 7 @interface Test1 8 // expected-warning@+2 {{empty paragraph passed to '\brief' command}} 9 /** 10 * \brief\author Aaa 11 * \param aaa Aaa 12 * \param bbb Bbb 13 */ 14 + (NSString *)test1:(NSString *)aaa suffix:(NSString *)bbb; 15 16 // expected-warning@+2 {{parameter 'aab' not found in the function declaration}} expected-note@+2 {{did you mean 'aaa'?}} 17 /** 18 * \param aab Aaa 19 */ 20 + (NSString *)test2:(NSString *)aaa; 21 22 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 23 /// \brief\author Aaa 24 @property int test3; // a property: ObjCPropertyDecl 25 26 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 27 /// \brief\author Aaa 28 @property int test4; // a property: ObjCPropertyDecl 29 @end 30 31 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 32 /// \brief\author Aaa 33 @interface Test1() 34 @end 35 36 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 37 /// \brief\author Aaa 38 @implementation Test1 // a class implementation : ObjCImplementationDecl 39 + (NSString *)test1:(NSString *)aaa suffix:(NSString *)bbb { 40 return 0; 41 } 42 43 + (NSString *)test2:(NSString *)aaa { 44 return 0; 45 } 46 47 @synthesize test3; // a property implementation: ObjCPropertyImplDecl 48 @dynamic test4; // a property implementation: ObjCPropertyImplDecl 49 50 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 51 /// \brief\author Aaa 52 NSString *_test5; 53 @end 54 55 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 56 /// \brief\author Aaa 57 @interface Test1(Test1Category) // a category: ObjCCategoryDecl 58 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 59 /// \brief\author Aaa 60 + (NSString *)test3:(NSString *)aaa; 61 @end 62 63 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 64 /// \brief\author Aaa 65 @implementation Test1(Test1Category) // a category implementation: ObjCCategoryImplDecl 66 + (NSString *)test3:(NSString *)aaa { 67 return 0; 68 } 69 @end 70 71 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 72 /// \brief\author Aaa 73 @protocol TestProto1 // a protocol: ObjCProtocolDecl 74 @end 75 76 int a; 77 78 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 79 /// \brief\author Aaa 80 @interface Test4 81 @end 82 83 int b; 84 85 @interface TestReturns1 86 /// \returns Aaa 87 - (int)test1:(NSString *)aaa; 88 89 // expected-warning@+1 {{'\returns' command used in a comment that is attached to a method returning void}} 90 /// \returns Aaa 91 - (void)test2:(NSString *)aaa; 92 @end 93 94 // expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 95 /// \param aaa Meow. 96 /// \param bbb Bbb. 97 /// \returns aaa. 98 typedef int (^test_param1)(int aaa, int ccc); 99 100 // rdar://13094352 101 // expected-warning@+2 {{'@method' command should be used in a comment attached to an Objective-C method declaration}} 102 @interface I 103 /*! @method Base64EncodeEx 104 */ 105 typedef id ID; 106 - (unsigned) Base64EncodeEx : (ID)Arg; 107 @end 108 109 // rdar://12379114 110 // expected-warning@+5 {{'@interface' command should not be used in a comment attached to a non-interface declaration}} 111 // expected-warning@+5 {{'@classdesign' command should not be used in a comment attached to a non-container declaration}} 112 // expected-warning@+5 {{'@coclass' command should not be used in a comment attached to a non-container declaration}} 113 @interface NSObject @end 114 /*! 115 @interface IOCommandGate 116 @classdesign Multiple paragraphs go here. 117 @coclass myCoClass 118 */ 119 120 typedef id OBJ; 121 @interface IOCommandGate : NSObject { 122 OBJ iv; 123 } 124 @end 125 126 // rdar://12379114 127 // expected-warning@+4 {{'@methodgroup' command should be used in a comment attached to an Objective-C method declaration}} 128 // expected-warning@+6 {{'@method' command should be used in a comment attached to an Objective-C method declaratio}} 129 @interface rdar12379114 130 /*! 131 @methodgroup Creating a request 132 */ 133 /*! 134 @method initWithTimeout is the 2nd method 135 */ 136 typedef unsigned int NSTimeInterval; 137 - (id)initWithTimeout:(NSTimeInterval)timeout; 138 @end 139 140 // expected-warning@+2 {{'@protocol' command should not be used in a comment attached to a non-protocol declaration}} 141 /*! 142 @protocol PROTO 143 */ 144 struct S; 145 146 /*! 147 @interface NSArray This is an array 148 */ 149 @class NSArray; 150 @interface NSArray @end 151 152 // expected-warning@+3 {{unknown command tag name}} 153 /*! 154 @interface NSMutableArray 155 @super NSArray 156 */ 157 @interface NSMutableArray : NSArray @end 158 159 /*! 160 @protocol MyProto 161 */ 162 @protocol MyProto @end 163 164 // expected-warning@+2 {{'@protocol' command should not be used in a comment attached to a non-protocol declaration}} 165 /*! 166 @protocol MyProto 167 */ 168 @interface INTF <MyProto> @end 169 170 // expected-warning@+2 {{'@struct' command should not be used in a comment attached to a non-struct declaration}} 171 /*! 172 @struct S1 THIS IS IT 173 */ 174 @interface S1 @end 175 176 // expected-warning@+1 {{unknown command tag name}} 177 /// \t bbb IS_DOXYGEN_END 178 int FooBar(); 179 180 // rdar://13836387 181 /** \brief Module handling the incoming notifications from the system. 182 * 183 * This includes: 184 * - Network Reachability 185 * - Power State 186 * - Low Disk 187 */ 188 @interface BRC : NSObject 189 - (void)removeReach:(NSObject*)observer; 190 @end 191 192 @implementation BRC : NSObject 193 - (void)removeReach:(NSObject*)observer // expected-note {{previous declaration is here}} 194 { 195 } 196 - (void)removeReach:(NSObject*)observer // expected-error {{duplicate declaration of method 'removeReach:'}} 197 { 198 } 199 @end 200 201 // rdar://13927330 202 /// @class Asset <- '@class' may be used in a comment attached to a an interface declaration 203 @interface Asset : NSObject 204 @end 205 206 // rdar://14024851 Check that this does not enter an infinite loop 207 @interface rdar14024851 208 -(void)meth; // expected-note {{declared here}} 209 @end 210 211 @implementation rdar14024851 // expected-warning {{method definition for 'meth' not found}} expected-note {{previous definition}} 212 @end 213 214 @implementation rdar14024851 // expected-error {{reimplementation}} 215 /// \brief comment 216 -(void)meth {} 217 @end 218 219 // rdar://14124644 220 @interface test_vararg1 221 /// @param[in] arg somthing 222 /// @param[in] ... This is vararg 223 - (void) VarArgMeth : (id)arg, ...; 224 @end 225 226 @implementation test_vararg1 227 /// @param[in] arg somthing 228 /// @param[in] ... This is vararg 229 - (void) VarArgMeth : (id)arg, ... {} 230 @end 231 232