aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/AST/DeclTemplate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/AST/DeclTemplate.cpp')
-rw-r--r--clang/lib/AST/DeclTemplate.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/clang/lib/AST/DeclTemplate.cpp b/clang/lib/AST/DeclTemplate.cpp
index c0be986..2f7ae6d 100644
--- a/clang/lib/AST/DeclTemplate.cpp
+++ b/clang/lib/AST/DeclTemplate.cpp
@@ -1670,20 +1670,25 @@ clang::getReplacedTemplateParameter(Decl *D, unsigned Index) {
auto P = CTSD->getSpecializedTemplateOrPartial();
TemplateParameterList *TPL;
if (const auto *CTPSD =
- dyn_cast<ClassTemplatePartialSpecializationDecl *>(P))
+ dyn_cast<ClassTemplatePartialSpecializationDecl *>(P)) {
TPL = CTPSD->getTemplateParameters();
- else
- TPL = cast<ClassTemplateDecl *>(P)->getTemplateParameters();
+ // FIXME: Obtain Args deduced for the partial specialization.
+ return {TPL->getParam(Index), {}};
+ }
+ TPL = cast<ClassTemplateDecl *>(P)->getTemplateParameters();
return {TPL->getParam(Index), CTSD->getTemplateArgs()[Index]};
}
case Decl::Kind::VarTemplateSpecialization: {
const auto *VTSD = cast<VarTemplateSpecializationDecl>(D);
auto P = VTSD->getSpecializedTemplateOrPartial();
TemplateParameterList *TPL;
- if (const auto *VTPSD = dyn_cast<VarTemplatePartialSpecializationDecl *>(P))
+ if (const auto *VTPSD =
+ dyn_cast<VarTemplatePartialSpecializationDecl *>(P)) {
TPL = VTPSD->getTemplateParameters();
- else
- TPL = cast<VarTemplateDecl *>(P)->getTemplateParameters();
+ // FIXME: Obtain Args deduced for the partial specialization.
+ return {TPL->getParam(Index), {}};
+ }
+ TPL = cast<VarTemplateDecl *>(P)->getTemplateParameters();
return {TPL->getParam(Index), VTSD->getTemplateArgs()[Index]};
}
case Decl::Kind::ClassTemplatePartialSpecialization: