Use TemplateParameterList to extract template parameter name.
llvm-svn: 128915
This commit is contained in:
parent
651d06e036
commit
98d26c91da
|
@ -840,21 +840,28 @@ CollectCXXBases(const CXXRecordDecl *RD, llvm::DIFile Unit,
|
||||||
llvm::DIArray CGDebugInfo::
|
llvm::DIArray CGDebugInfo::
|
||||||
CollectCXXTemplateParams(const ClassTemplateSpecializationDecl *TSpecial,
|
CollectCXXTemplateParams(const ClassTemplateSpecializationDecl *TSpecial,
|
||||||
llvm::DIFile Unit) {
|
llvm::DIFile Unit) {
|
||||||
llvm::SmallVector<llvm::Value *, 16> TemplateParams;
|
llvm::PointerUnion<ClassTemplateDecl *,
|
||||||
const TemplateArgumentList &TAL = TSpecial->getTemplateArgs();
|
ClassTemplatePartialSpecializationDecl *>
|
||||||
for (unsigned i = 0, e = TAL.size(); i != e; ++i) {
|
PU = TSpecial->getSpecializedTemplateOrPartial();
|
||||||
const TemplateArgument &TA = TAL[i];
|
|
||||||
|
TemplateParameterList *TPList = PU.is<ClassTemplateDecl *>() ?
|
||||||
|
PU.get<ClassTemplateDecl *>()->getTemplateParameters() :
|
||||||
|
PU.get<ClassTemplatePartialSpecializationDecl *>()->getTemplateParameters();
|
||||||
|
const TemplateArgumentList &TAList = TSpecial->getTemplateInstantiationArgs();
|
||||||
|
llvm::SmallVector<llvm::Value *, 16> TemplateParams;
|
||||||
|
for (unsigned i = 0, e = TAList.size(); i != e; ++i) {
|
||||||
|
const TemplateArgument &TA = TAList[i];
|
||||||
|
NamedDecl *ND = TPList->getParam(i);
|
||||||
if (TA.getKind() == TemplateArgument::Type) {
|
if (TA.getKind() == TemplateArgument::Type) {
|
||||||
llvm::DIType TTy = getOrCreateType(TA.getAsType(), Unit);
|
llvm::DIType TTy = getOrCreateType(TA.getAsType(), Unit);
|
||||||
llvm::DITemplateTypeParameter TTP =
|
llvm::DITemplateTypeParameter TTP =
|
||||||
DBuilder.createTemplateTypeParameter(TheCU, TTy.getName(), TTy);
|
DBuilder.createTemplateTypeParameter(TheCU, ND->getName(), TTy);
|
||||||
TemplateParams.push_back(TTP);
|
TemplateParams.push_back(TTP);
|
||||||
} else if (TA.getKind() == TemplateArgument::Integral) {
|
} else if (TA.getKind() == TemplateArgument::Integral) {
|
||||||
llvm::DIType TTy = getOrCreateType(TA.getIntegralType(), Unit);
|
llvm::DIType TTy = getOrCreateType(TA.getIntegralType(), Unit);
|
||||||
// FIXME: Get parameter name, instead of parameter type name.
|
|
||||||
llvm::DITemplateValueParameter TVP =
|
llvm::DITemplateValueParameter TVP =
|
||||||
DBuilder.createTemplateValueParameter(TheCU, TTy.getName(), TTy,
|
DBuilder.createTemplateValueParameter(TheCU, ND->getName(), TTy,
|
||||||
TA.getAsIntegral()->getZExtValue());
|
TA.getAsIntegral()->getZExtValue());
|
||||||
TemplateParams.push_back(TVP);
|
TemplateParams.push_back(TVP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue