diff options
author | Anders Carlsson <andersca@mac.com> | 2009-09-26 02:26:02 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-09-26 02:26:02 +0000 |
commit | bdaaab4671bccb5453837f982e062fb5407d59b4 (patch) | |
tree | 5b0579dd42063858d7f34b9516f1e2974915c5b6 /clang/lib/CodeGen/Mangle.cpp | |
parent | 47680d8040b7a752960c60ce33addfb25d13e76f (diff) | |
download | bcm5719-llvm-bdaaab4671bccb5453837f982e062fb5407d59b4.tar.gz bcm5719-llvm-bdaaab4671bccb5453837f982e062fb5407d59b4.zip |
Improve mangling of typename types.
llvm-svn: 82833
Diffstat (limited to 'clang/lib/CodeGen/Mangle.cpp')
-rw-r--r-- | clang/lib/CodeGen/Mangle.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/Mangle.cpp b/clang/lib/CodeGen/Mangle.cpp index 83dc0e64dcf..9766e585ff1 100644 --- a/clang/lib/CodeGen/Mangle.cpp +++ b/clang/lib/CodeGen/Mangle.cpp @@ -911,7 +911,22 @@ void CXXNameMangler::mangleType(const TemplateSpecializationType *T) { } void CXXNameMangler::mangleType(const TypenameType *T) { - assert(false && "can't mangle dependent typenames yet"); + // Typename types are always nested + Out << 'N'; + + const Type *QTy = T->getQualifier()->getAsType(); + if (const TemplateSpecializationType *TST = + dyn_cast<TemplateSpecializationType>(QTy)) { + TemplateDecl *TD = TST->getTemplateName().getAsTemplateDecl(); + + mangleTemplatePrefix(TD); + mangleTemplateArgs(TST->getArgs(), TST->getNumArgs()); + } else + assert(false && "Unhandled type!"); + + mangleSourceName(T->getIdentifier()); + + Out << 'E'; } void CXXNameMangler::mangleExpression(const Expr *E) { |