diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/AST/ASTContext.cpp | 10 | ||||
-rw-r--r-- | clang/test/Index/annotate-comments-typedef.m | 30 |
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><anonymous></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 |