mirror of https://github.com/microsoft/clang.git
[document parsing]: When tag declaration (but not definition!)
is part of the decl-specifier-seq of some other declaration, it doesn't get comment. // rdar://12390371 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179722 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
abee27ba69
commit
099ecfb0ed
|
@ -97,7 +97,12 @@ RawComment *ASTContext::getRawCommentForDeclNoCache(const Decl *D) const {
|
|||
if (ED->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (const TagDecl *TD = dyn_cast<TagDecl>(D)) {
|
||||
// When tag declaration (but not definition!) is part of the
|
||||
// decl-specifier-seq of some other declaration, it doesn't get comment
|
||||
if (TD->isEmbeddedInDeclarator() && !TD->isCompleteDefinition())
|
||||
return NULL;
|
||||
}
|
||||
// TODO: handle comments for function parameters properly.
|
||||
if (isa<ParmVarDecl>(D))
|
||||
return NULL;
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -Wdocumentation -verify %s
|
||||
// rdar://12390371
|
||||
|
||||
/** @return s Test*/
|
||||
struct s* f(void);
|
||||
struct s;
|
||||
|
||||
struct s1;
|
||||
/** @return s1 Test 1*/
|
||||
struct s1* f1(void);
|
||||
|
||||
struct s2;
|
||||
/** @return s2 Test 2*/
|
||||
struct s2* f2(void);
|
||||
struct s2;
|
||||
|
||||
// expected-warning@+1 {{'@return' command used in a comment that is not attached to a function or method declaration}}
|
||||
/** @return s3 Test 3 - expected warning here */
|
||||
struct s3;
|
||||
struct s3* f3(void);
|
||||
|
||||
/** @return s4 Test 4 */
|
||||
struct s4* f4(void);
|
||||
struct s4 { int is; };
|
||||
|
||||
// expected-warning@+1 {{'@return' command used in a comment that is not attached to a function or method declaration}}
|
||||
/** @return s5 Test 5 - expected warning here */
|
||||
struct s5 { int is; };
|
||||
struct s5* f5(void);
|
||||
|
||||
// expected-warning@+1 {{'@return' command used in a comment that is not attached to a function or method declaration}}
|
||||
/** @return s6 Test 6 - expected warning here */
|
||||
struct s6 *ps6;
|
||||
struct s6* f6(void);
|
||||
|
||||
// expected-warning@+1 {{'@return' command used in a comment that is not attached to a function or method declaration}}
|
||||
/** @return s7 Test 7 - expected warning here */
|
||||
struct s7;
|
||||
struct s7* f7(void);
|
||||
|
||||
struct s8 { int is8; };
|
||||
/** @return s8 Test 8 */
|
||||
struct s4 *f8(struct s8 *p);
|
||||
|
||||
|
||||
/** @return e Test*/
|
||||
enum e* g(void);
|
||||
enum e;
|
||||
|
||||
enum e1;
|
||||
/** @return e1 Test 1*/
|
||||
enum e1* g1(void);
|
||||
|
||||
enum e2;
|
||||
/** @return e2 Test 2*/
|
||||
enum e2* g2(void);
|
||||
enum e2;
|
||||
|
||||
// expected-warning@+1 {{'@return' command used in a comment that is not attached to a function or method declaration}}
|
||||
/** @return e3 Test 3 - expected warning here */
|
||||
enum e3;
|
||||
enum e3* g3(void);
|
||||
|
||||
/** @return e4 Test 4 */
|
||||
enum e4* g4(void);
|
||||
enum e4 { one };
|
||||
|
||||
// expected-warning@+1 {{'@return' command used in a comment that is not attached to a function or method declaration}}
|
||||
/** @return e5 Test 5 - expected warning here */
|
||||
enum e5 { two };
|
||||
enum e5* g5(void);
|
||||
|
||||
// expected-warning@+1 {{'@return' command used in a comment that is not attached to a function or method declaration}}
|
||||
/** @return e6 Test 6 - expected warning here */
|
||||
enum e6 *pe6;
|
||||
enum e6* g6(void);
|
||||
|
||||
// expected-warning@+1 {{'@return' command used in a comment that is not attached to a function or method declaration}}
|
||||
/** @return e7 Test 7 - expected warning here */
|
||||
enum e7;
|
||||
enum e7* g7(void);
|
||||
|
||||
enum e8 { three };
|
||||
/** @return e8 Test 8 */
|
||||
enum e4 *g8(enum e8 *p);
|
Loading…
Reference in New Issue