diff options
| author | Devang Patel <dpatel@apple.com> | 2011-02-02 21:38:49 +0000 |
|---|---|---|
| committer | Devang Patel <dpatel@apple.com> | 2011-02-02 21:38:49 +0000 |
| commit | e3773c2f511e1c2deb2f1128a14e98b386ca47c4 (patch) | |
| tree | 60d8dae46c1ab600cd0238cee42177fc27770df2 /clang/lib | |
| parent | 3a9e65efb6019514fc332382f03b33afae484fb8 (diff) | |
| download | bcm5719-llvm-e3773c2f511e1c2deb2f1128a14e98b386ca47c4.tar.gz bcm5719-llvm-e3773c2f511e1c2deb2f1128a14e98b386ca47c4.zip | |
Emit debug info for template type parameters.
llvm-svn: 124753
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index a98c32a8d0b..c4a6d570f26 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -953,9 +953,23 @@ llvm::DIType CGDebugInfo::CreateType(const RecordType *Ty) { } CollectRecordFields(RD, Unit, EltTys); + llvm::SmallVector<llvm::Value *, 16> TemplateParams; if (CXXDecl) { CollectCXXMemberFunctions(CXXDecl, Unit, EltTys, FwdDecl); CollectCXXFriends(CXXDecl, Unit, EltTys, FwdDecl); + if (ClassTemplateSpecializationDecl *TSpecial + = dyn_cast<ClassTemplateSpecializationDecl>(RD)) { + const TemplateArgumentList &TAL = TSpecial->getTemplateArgs(); + for (unsigned i = 0, e = TAL.size(); i != e; ++i) { + const TemplateArgument &TA = TAL[i]; + if (TA.getKind() == TemplateArgument::Type) { + llvm::DIType TTy = getOrCreateType(TA.getAsType(), Unit); + llvm::DITemplateTypeParameter TTP = + DBuilder.CreateTemplateTypeParameter(TheCU, TTy.getName(), TTy); + TemplateParams.push_back(TTP); + } + } + } } RegionStack.pop_back(); @@ -1000,9 +1014,12 @@ llvm::DIType CGDebugInfo::CreateType(const RecordType *Ty) { } else if (CXXDecl->isDynamicClass()) ContainingType = FwdDecl; + llvm::DIArray TParamsArray = + DBuilder.GetOrCreateArray(TemplateParams.data(), TemplateParams.size()); RealDecl = DBuilder.CreateClassType(RDContext, RDName, DefUnit, Line, Size, Align, 0, 0, llvm::DIType(), - Elements, ContainingType); + Elements, ContainingType, + TParamsArray); } // Now that we have a real decl for the struct, replace anything using the |

