123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-objc-root-class -Wdocumentation -Wdocumentation-pedantic -verify %s
- @class NSString;
- // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
- /// \brief\author Aaa
- @interface Test1
- // expected-warning@+2 {{empty paragraph passed to '\brief' command}}
- /**
- * \brief\author Aaa
- * \param aaa Aaa
- * \param bbb Bbb
- */
- + (NSString *)test1:(NSString *)aaa suffix:(NSString *)bbb;
- // expected-warning@+2 {{parameter 'aab' not found in the function declaration}} expected-note@+2 {{did you mean 'aaa'?}}
- /**
- * \param aab Aaa
- */
- + (NSString *)test2:(NSString *)aaa;
- // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
- /// \brief\author Aaa
- @property int test3; // a property: ObjCPropertyDecl
- // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
- /// \brief\author Aaa
- @property int test4; // a property: ObjCPropertyDecl
- @end
- // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
- /// \brief\author Aaa
- @interface Test1()
- @end
- // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
- /// \brief\author Aaa
- @implementation Test1 // a class implementation : ObjCImplementationDecl
- + (NSString *)test1:(NSString *)aaa suffix:(NSString *)bbb {
- return 0;
- }
- + (NSString *)test2:(NSString *)aaa {
- return 0;
- }
- @synthesize test3; // a property implementation: ObjCPropertyImplDecl
- @dynamic test4; // a property implementation: ObjCPropertyImplDecl
- // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
- /// \brief\author Aaa
- NSString *_test5;
- @end
- // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
- /// \brief\author Aaa
- @interface Test1(Test1Category) // a category: ObjCCategoryDecl
- // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
- /// \brief\author Aaa
- + (NSString *)test3:(NSString *)aaa;
- @end
- // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
- /// \brief\author Aaa
- @implementation Test1(Test1Category) // a category implementation: ObjCCategoryImplDecl
- + (NSString *)test3:(NSString *)aaa {
- return 0;
- }
- @end
- // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
- /// \brief\author Aaa
- @protocol TestProto1 // a protocol: ObjCProtocolDecl
- @end
- int a;
- // expected-warning@+1 {{empty paragraph passed to '\brief' command}}
- /// \brief\author Aaa
- @interface Test4
- @end
- int b;
- @interface TestReturns1
- /// \returns Aaa
- - (int)test1:(NSString *)aaa;
- // expected-warning@+1 {{'\returns' command used in a comment that is attached to a method returning void}}
- /// \returns Aaa
- - (void)test2:(NSString *)aaa;
- @end
- // expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}}
- /// \param aaa Meow.
- /// \param bbb Bbb.
- /// \returns aaa.
- typedef int (^test_param1)(int aaa, int ccc);
- // rdar://13094352
- // expected-warning@+2 {{'@method' command should be used in a comment attached to an Objective-C method declaration}}
- @interface I
- /*! @method Base64EncodeEx
- */
- typedef id ID;
- - (unsigned) Base64EncodeEx : (ID)Arg;
- @end
- // rdar://12379114
- // expected-warning@+5 {{'@interface' command should not be used in a comment attached to a non-interface declaration}}
- // expected-warning@+5 {{'@classdesign' command should not be used in a comment attached to a non-container declaration}}
- // expected-warning@+5 {{'@coclass' command should not be used in a comment attached to a non-container declaration}}
- @interface NSObject @end
- /*!
- @interface IOCommandGate
- @classdesign Multiple paragraphs go here.
- @coclass myCoClass
- */
- typedef id OBJ;
- @interface IOCommandGate : NSObject {
- OBJ iv;
- }
- @end
- // rdar://12379114
- // expected-warning@+4 {{'@methodgroup' command should be used in a comment attached to an Objective-C method declaration}}
- // expected-warning@+6 {{'@method' command should be used in a comment attached to an Objective-C method declaratio}}
- @interface rdar12379114
- /*!
- @methodgroup Creating a request
- */
- /*!
- @method initWithTimeout is the 2nd method
- */
- typedef unsigned int NSTimeInterval;
- - (id)initWithTimeout:(NSTimeInterval)timeout;
- @end
- // expected-warning@+2 {{'@protocol' command should not be used in a comment attached to a non-protocol declaration}}
- /*!
- @protocol PROTO
- */
- struct S;
- /*!
- @interface NSArray This is an array
- */
- @class NSArray;
- @interface NSArray @end
- // expected-warning@+3 {{unknown command tag name}}
- /*!
- @interface NSMutableArray
- @super NSArray
- */
- @interface NSMutableArray : NSArray @end
- /*!
- @protocol MyProto
- */
- @protocol MyProto @end
- // expected-warning@+2 {{'@protocol' command should not be used in a comment attached to a non-protocol declaration}}
- /*!
- @protocol MyProto
- */
- @interface INTF <MyProto> @end
- // expected-warning@+2 {{'@struct' command should not be used in a comment attached to a non-struct declaration}}
- /*!
- @struct S1 THIS IS IT
- */
- @interface S1 @end
- // expected-warning@+1 {{unknown command tag name}}
- /// \t bbb IS_DOXYGEN_END
- int FooBar();
- // rdar://13836387
- /** \brief Module handling the incoming notifications from the system.
- *
- * This includes:
- * - Network Reachability
- * - Power State
- * - Low Disk
- */
- @interface BRC : NSObject
- - (void)removeReach:(NSObject*)observer;
- @end
- @implementation BRC : NSObject
- - (void)removeReach:(NSObject*)observer // expected-note {{previous declaration is here}}
- {
- }
- - (void)removeReach:(NSObject*)observer // expected-error {{duplicate declaration of method 'removeReach:'}}
- {
- }
- @end
- // rdar://13927330
- /// @class Asset <- '@class' may be used in a comment attached to a an interface declaration
- @interface Asset : NSObject
- @end
- // rdar://14024851 Check that this does not enter an infinite loop
- @interface rdar14024851
- -(void)meth; // expected-note {{declared here}}
- @end
- @implementation rdar14024851 // expected-warning {{method definition for 'meth' not found}} expected-note {{previous definition}}
- @end
- @implementation rdar14024851 // expected-error {{reimplementation}}
- /// \brief comment
- -(void)meth {}
- @end
- // rdar://14124644
- @interface test_vararg1
- /// @param[in] arg something
- /// @param[in] ... This is vararg
- - (void) VarArgMeth : (id)arg, ...;
- @end
- @implementation test_vararg1
- /// @param[in] arg something
- /// @param[in] ... This is vararg
- - (void) VarArgMeth : (id)arg, ... {}
- @end
- /**
- * blockPointerVariable
- *
- * @param i is integer.
- * @returns integer.
- */
- int (^blockPointerVariable)(int i);
- struct HasFields {
- /**
- * blockPointerField
- *
- * \param i is integer.
- * \returns integer.
- */
- int (^blockPointerFields)(int i);
- };
- // expected-warning@+5 {{'\returns' command used in a comment that is attached to a function returning void}}
- /**
- * functionPointerVariable
- *
- * \param p not here.
- * \returns integer.
- */
- void (^_Nullable blockPointerVariableThatLeadsNowhere)();
- @interface CheckFunctionBlockPointerVars {
- /**
- * functionPointerIVar
- *
- * @param i is integer.
- * @returns integer.
- */
- int (*functionPointerIVar)(int i);
- /**
- * blockPointerIVar
- *
- * \param i is integer.
- * \returns integer.
- */
- int (^blockPointerIVar)(int i);
- }
- /**
- * functionPointerProperty
- *
- * @param i is integer.
- * @returns integer.
- */
- @property int (*functionPointerProperty)(int i);
- /**
- * blockPointerProperty
- *
- * \param i is integer.
- * \returns integer.
- */
- @property int (^blockPointerProperty)(int i);
- /**
- * blockReturnsNothing
- *
- * \returns Nothing, but can allow this as this pattern is used to document the
- * value that the property getter returns.
- */
- @property void (^blockReturnsNothing)();
- @end
- /*!
- * Block typedef with variadic params.
- *
- * @param a
- * works
- *
- * @param ...
- * now should work too.
- */
- typedef void (^VariadicBlockType)(int a, ...);
- // PR42844 - Assertion failures when using typedefed block pointers
- typedef void(^VoidBlockType)();
- typedef VoidBlockType VoidBlockTypeCall();
- VoidBlockTypeCall *d; ///< \return none
- // expected-warning@-1 {{'\return' command used in a comment that is not attached to a function or method declaration}}
- VoidBlockTypeCall ^e; ///< \return none
- // expected-warning@-1 {{'\return' command used in a comment that is not attached to a function or method declaration}}
|