summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/AST/ASTContext.cpp10
-rw-r--r--clang/test/Index/annotate-comments-typedef.m30
2 files changed, 40 insertions, 0 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 0b771745fd5..b0cea14788b 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -434,6 +434,16 @@ comments::FullComment *ASTContext::getCommentForDecl(
}
}
}
+ else if (const TypedefDecl *TD = dyn_cast<TypedefDecl>(D)) {
+ QualType QT = TD->getUnderlyingType();
+ if (const EnumType *ET = QT->getAs<EnumType>()) {
+ if (const EnumDecl *ED = ET->getDecl())
+ if (comments::FullComment *FC = getCommentForDecl(ED, PP)) {
+ comments::FullComment *CFC = cloneFullComment(FC, D);
+ return CFC;
+ }
+ }
+ }
return NULL;
}
diff --git a/clang/test/Index/annotate-comments-typedef.m b/clang/test/Index/annotate-comments-typedef.m
new file mode 100644
index 00000000000..0a87a7d8c3f
--- /dev/null
+++ b/clang/test/Index/annotate-comments-typedef.m
@@ -0,0 +1,30 @@
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: c-index-test -test-load-source all -comments-xml-schema=%S/../../bindings/xml/comment-xml-schema.rng %s > %t/out
+// RUN: FileCheck %s < %t/out
+// rdar://13067629
+
+// Ensure that XML we generate is not invalid.
+// RUN: FileCheck %s -check-prefix=WRONG < %t/out
+// WRONG-NOT: CommentXMLInvalid
+
+/** Documentation for NSUInteger */
+typedef unsigned int NSUInteger;
+
+/** Documentation for MyEnum */
+typedef enum : NSUInteger {
+ MyEnumFoo, /**< value Foo */
+ MyEnumBar, /**< value Bar */
+ MyEnumBaz, /**< value Baz */
+} MyEnum;
+// CHECK: TypedefDecl=MyEnum:[[@LINE-1]]:3 (Definition) FullCommentAsHTML=[<p class="para-brief"> Documentation for MyEnum </p>] FullCommentAsXML=[<Typedef file="{{[^"]+}}annotate-comments-typedef.m" line="[[@LINE-1]]" column="3"><Name>&lt;anonymous&gt;</Name><USR>c:@EA@MyEnum</USR><Declaration>typedef enum MyEnum MyEnum</Declaration><Abstract><Para> Documentation for MyEnum </Para></Abstract></Typedef>] CommentXMLValid
+
+
+/** Documentation for E */
+enum E {
+ MyEnumFoo, /**< value Foo */
+ MyEnumBar, /**< value Bar */
+ MyEnumBaz, /**< value Baz */
+};
+typedef enum E E_T;
+// CHECK: TypedefDecl=E_T:[[@LINE-1]]:16 (Definition) FullCommentAsHTML=[<p class="para-brief"> Documentation for E </p>] FullCommentAsXML=[<Typedef file="{{[^"]+}}annotate-comments-typedef.m" line="[[@LINE-1]]" column="16"><Name>E</Name><USR>c:@E@E</USR><Declaration>typedef enum E E_T</Declaration><Abstract><Para> Documentation for E </Para></Abstract></Typedef>] CommentXMLValid
OpenPOWER on IntegriCloud