diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 8e06bbd34b6..dc49e1865ed 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -1360,10 +1360,16 @@ CollectCXXTemplateParams(const ClassTemplateSpecializationDecl *TSpecial, ClassTemplatePartialSpecializationDecl *> PU = TSpecial->getSpecializedTemplateOrPartial(); - TemplateParameterList *TPList = PU.is<ClassTemplateDecl *>() ? - PU.get<ClassTemplateDecl *>()->getTemplateParameters() : - PU.get<ClassTemplatePartialSpecializationDecl *>()->getTemplateParameters(); - const TemplateArgumentList &TAList = TSpecial->getTemplateInstantiationArgs(); + TemplateParameterList *TPList; + if (auto *CTD = PU.dyn_cast<ClassTemplateDecl *>()) + TPList = CTD->getTemplateParameters(); + else { + // Always get the full list of parameters, not just the ones from + // the specialization. + auto *CTPSD = PU.get<ClassTemplatePartialSpecializationDecl *>(); + TPList = CTPSD->getSpecializedTemplate()->getTemplateParameters(); + } + const TemplateArgumentList &TAList = TSpecial->getTemplateArgs(); return CollectTemplateParams(TPList, TAList.asArray(), Unit); } |

