diff options
-rw-r--r-- | src/Output.cxx | 7 | ||||
-rw-r--r-- | test/CMakeLists.txt | 2 | ||||
-rw-r--r-- | test/expect/gccxml.any.Class-partial-template-member-Typedef.xml.txt | 22 | ||||
-rw-r--r-- | test/expect/gccxml.any.Namespace-Class-partial-template-members.xml.txt | 5 | ||||
-rw-r--r-- | test/input/Class-partial-template-member-Typedef.cxx | 7 | ||||
-rw-r--r-- | test/input/Namespace-Class-partial-template-members.cxx | 7 |
6 files changed, 49 insertions, 1 deletions
diff --git a/src/Output.cxx b/src/Output.cxx index 91f9705..574de3d 100644 --- a/src/Output.cxx +++ b/src/Output.cxx @@ -490,7 +490,9 @@ unsigned int ASTVisitor::AddDumpNode(DumpType dt, bool complete) { if(clang::DeclContext const* tdc = tdt->getDecl()->getDeclContext()) { if(clang::CXXRecordDecl const* tdx = clang::dyn_cast<clang::CXXRecordDecl>(tdc)) { - if(tdx->getDescribedClassTemplate()) { + if(tdx->getDescribedClassTemplate() || + clang::isa<clang::ClassTemplatePartialSpecializationDecl>(tdx) + ) { // This TypedefType refers to a non-dependent // TypedefDecl member of a class template. Since gccxml // format does not include uninstantiated templates we @@ -899,6 +901,9 @@ void ASTVisitor::PrintMembersAttribute(clang::DeclContext const* dc) static_cast<clang::ClassTemplateDecl const*>(d), &emitted); continue; } break; + case clang::Decl::ClassTemplatePartialSpecialization: { + continue; + } break; case clang::Decl::Empty: { continue; } break; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index a1f7c45..40d05e8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -130,6 +130,7 @@ castxml_test_gccxml(Class-implicit-members) castxml_test_gccxml(Class-incomplete) castxml_test_gccxml(Class-incomplete-twice) castxml_test_gccxml(Class-member-template) +castxml_test_gccxml(Class-partial-template-member-Typedef) castxml_test_gccxml(Class-template) castxml_test_gccxml(Class-template-Method-Argument-default) castxml_test_gccxml(Class-template-bases) @@ -157,6 +158,7 @@ castxml_test_gccxml(MethodType) castxml_test_gccxml(MethodType-cv) castxml_test_gccxml(Namespace) castxml_test_gccxml(Namespace-Class-members) +castxml_test_gccxml(Namespace-Class-partial-template-members) castxml_test_gccxml(Namespace-Class-template-members) castxml_test_gccxml(Namespace-Function-template-members) castxml_test_gccxml(Namespace-empty) diff --git a/test/expect/gccxml.any.Class-partial-template-member-Typedef.xml.txt b/test/expect/gccxml.any.Class-partial-template-member-Typedef.xml.txt new file mode 100644 index 0000000..e158f42 --- /dev/null +++ b/test/expect/gccxml.any.Class-partial-template-member-Typedef.xml.txt @@ -0,0 +1,22 @@ +^<\?xml version="1.0"\?> +<GCC_XML[^>]*> + <Class id="_1" name="start<int &>" context="_2" location="f1:7" file="f1" line="7" members="_3 _4 _5 _6 _7 _8"/> + <Typedef id="_3" name="Int" type="_9" context="_1" access="private" location="f1:3" file="f1" line="3"/> + <Method id="_4" name="method" returns="_9" context="_1" access="public" location="f1:5" file="f1" line="5"> + <Argument type="_9" location="f1:5" file="f1" line="5"/> + </Method> + <Constructor id="_5" name="start" context="_1" access="public" location="f1:7" file="f1" line="7" inline="1" artificial="1"/> + <Constructor id="_6" name="start" context="_1" access="public" location="f1:7" file="f1" line="7" inline="1" artificial="1"> + <Argument type="_10" location="f1:7" file="f1" line="7"/> + </Constructor> + <OperatorMethod id="_7" name="=" returns="_11" context="_1" access="public" location="f1:7" file="f1" line="7" inline="1" artificial="1"> + <Argument type="_10" location="f1:7" file="f1" line="7"/> + </OperatorMethod> + <Destructor id="_8" name="start" context="_1" access="public" location="f1:7" file="f1" line="7" inline="1" artificial="1"/> + <FundamentalType id="_9" name="int"/> + <ReferenceType id="_10" type="_1c"/> + <ReferenceType id="_11" type="_1"/> + <Namespace id="_2" name="::"/> + <CvQualifiedType id="_1c" type="_1" const="1"/> + <File id="f1" name=".*/test/input/Class-partial-template-member-Typedef.cxx"/> +</GCC_XML>$ diff --git a/test/expect/gccxml.any.Namespace-Class-partial-template-members.xml.txt b/test/expect/gccxml.any.Namespace-Class-partial-template-members.xml.txt new file mode 100644 index 0000000..763161e --- /dev/null +++ b/test/expect/gccxml.any.Namespace-Class-partial-template-members.xml.txt @@ -0,0 +1,5 @@ +^<\?xml version="1.0"\?> +<GCC_XML[^>]*> + <Namespace id="_1" name="start" context="_2"/> + <Namespace id="_2" name="::"/> +</GCC_XML>$ diff --git a/test/input/Class-partial-template-member-Typedef.cxx b/test/input/Class-partial-template-member-Typedef.cxx new file mode 100644 index 0000000..ad72b49 --- /dev/null +++ b/test/input/Class-partial-template-member-Typedef.cxx @@ -0,0 +1,7 @@ +template <typename T> class start; +template <typename T> class start<T&> { + typedef int Int; +public: + int method(Int); +}; +template class start<int&>; diff --git a/test/input/Namespace-Class-partial-template-members.cxx b/test/input/Namespace-Class-partial-template-members.cxx new file mode 100644 index 0000000..0c220c9 --- /dev/null +++ b/test/input/Namespace-Class-partial-template-members.cxx @@ -0,0 +1,7 @@ +namespace start { + template <typename T> class A; + template <typename T> class A<T&> { + static int data; + }; + template <typename T> int A<T&>::data; +} |