Author: arphaman Date: Tue Jan 3 06:11:17 2017 New Revision: 290884 URL: http://llvm.org/viewvc/llvm-project?rev=290884&view=rev Log: Handle ClassTemplateSpecializationDecl in DeclContextPrinter
This commit fixes a crash that occurs when -print-decl-contexts AST consumer tries to print an unhandled declaration. rdar://19467234 Differential Revision: https://reviews.llvm.org/D26964 Modified: cfe/trunk/lib/Frontend/ASTConsumers.cpp cfe/trunk/test/Coverage/cxx-language-features.inc Modified: cfe/trunk/lib/Frontend/ASTConsumers.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTConsumers.cpp?rev=290884&r1=290883&r2=290884&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/ASTConsumers.cpp (original) +++ cfe/trunk/lib/Frontend/ASTConsumers.cpp Tue Jan 3 06:11:17 2017 @@ -370,6 +370,26 @@ void DeclContextPrinter::PrintDeclContex break; } + case Decl::ClassTemplateSpecialization: { + const auto *CTSD = cast<ClassTemplateSpecializationDecl>(DC); + if (CTSD->isCompleteDefinition()) + Out << "[class template specialization] "; + else + Out << "<class template specialization> "; + Out << *CTSD; + break; + } + + case Decl::ClassTemplatePartialSpecialization: { + const auto *CTPSD = cast<ClassTemplatePartialSpecializationDecl>(DC); + if (CTPSD->isCompleteDefinition()) + Out << "[class template partial specialization] "; + else + Out << "<class template partial specialization> "; + Out << *CTPSD; + break; + } + default: llvm_unreachable("a decl that inherits DeclContext isn't handled"); } @@ -400,7 +420,8 @@ void DeclContextPrinter::PrintDeclContex case Decl::CXXConstructor: case Decl::CXXDestructor: case Decl::CXXConversion: - { + case Decl::ClassTemplateSpecialization: + case Decl::ClassTemplatePartialSpecialization: { DeclContext* DC = cast<DeclContext>(I); PrintDeclContext(DC, Indentation+2); break; Modified: cfe/trunk/test/Coverage/cxx-language-features.inc URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Coverage/cxx-language-features.inc?rev=290884&r1=290883&r2=290884&view=diff ============================================================================== --- cfe/trunk/test/Coverage/cxx-language-features.inc (original) +++ cfe/trunk/test/Coverage/cxx-language-features.inc Tue Jan 3 06:11:17 2017 @@ -44,3 +44,14 @@ namespace user { // Empty declaration ; + +// Template specialization declarations +template<typename T> class ClassTemplateSpecialization; + +template<> +class ClassTemplateSpecialization<bool> { }; + +template<typename T, bool> struct ClassTemplatePartialSpecialization; + +template<typename T> +struct ClassTemplatePartialSpecialization<T, true> { }; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits