Use TemplateParameterList to extract template parameter name.

llvm-svn: 128915
This commit is contained in:
Devang Patel 2011-04-05 20:15:06 +00:00
parent 651d06e036
commit 98d26c91da
1 changed files with 15 additions and 8 deletions

View File

@ -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);
} }
} }