summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/Mangle.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-09-26 02:26:02 +0000
committerAnders Carlsson <andersca@mac.com>2009-09-26 02:26:02 +0000
commitbdaaab4671bccb5453837f982e062fb5407d59b4 (patch)
tree5b0579dd42063858d7f34b9516f1e2974915c5b6 /clang/lib/CodeGen/Mangle.cpp
parent47680d8040b7a752960c60ce33addfb25d13e76f (diff)
downloadbcm5719-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.cpp17
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) {
OpenPOWER on IntegriCloud