r179722 - [document parsing]: When tag declaration (but not definition!)

Fariborz Jahanian fjahanian at apple.com
Wed Apr 17 14:05:20 PDT 2013


Author: fjahanian
Date: Wed Apr 17 16:05:20 2013
New Revision: 179722

URL: http://llvm.org/viewvc/llvm-project?rev=179722&view=rev
Log:
[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

Added:
    cfe/trunk/test/Sema/no-documentation-warn-tagdecl-specifier.c
Modified:
    cfe/trunk/lib/AST/ASTContext.cpp

Modified: cfe/trunk/lib/AST/ASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=179722&r1=179721&r2=179722&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ASTContext.cpp (original)
+++ cfe/trunk/lib/AST/ASTContext.cpp Wed Apr 17 16:05:20 2013
@@ -97,7 +97,12 @@ RawComment *ASTContext::getRawCommentFor
     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;

Added: cfe/trunk/test/Sema/no-documentation-warn-tagdecl-specifier.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/no-documentation-warn-tagdecl-specifier.c?rev=179722&view=auto
==============================================================================
--- cfe/trunk/test/Sema/no-documentation-warn-tagdecl-specifier.c (added)
+++ cfe/trunk/test/Sema/no-documentation-warn-tagdecl-specifier.c Wed Apr 17 16:05:20 2013
@@ -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 at +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 at +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 at +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 at +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 at +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 at +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 at +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 at +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);





More information about the cfe-commits mailing list