summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/Mangle.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-09-17 03:46:43 +0000
committerAnders Carlsson <andersca@mac.com>2009-09-17 03:46:43 +0000
commitdf644fb773ed4fb8020208765b2fdcc52da46518 (patch)
tree390fe4067c8c2e2b78bca8fa4b4e66167e0f82d3 /clang/lib/CodeGen/Mangle.cpp
parent98e00bb162e7aa3052c200b87180509687ad7b2f (diff)
downloadbcm5719-llvm-df644fb773ed4fb8020208765b2fdcc52da46518.tar.gz
bcm5719-llvm-df644fb773ed4fb8020208765b2fdcc52da46518.zip
When mangling function template specialization, mangle the type encoding of the original function template. Also, port mangle.cpp and function-template-specialization.cpp over to using FileCheck.
llvm-svn: 82114
Diffstat (limited to 'clang/lib/CodeGen/Mangle.cpp')
-rw-r--r--clang/lib/CodeGen/Mangle.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/clang/lib/CodeGen/Mangle.cpp b/clang/lib/CodeGen/Mangle.cpp
index 21398677dc6..c0451bfa02c 100644
--- a/clang/lib/CodeGen/Mangle.cpp
+++ b/clang/lib/CodeGen/Mangle.cpp
@@ -216,10 +216,15 @@ void CXXNameMangler::mangleFunctionEncoding(const FunctionDecl *FD) {
// 2. Destructors.
// 3. Conversion operator functions, e.g. operator int.
bool MangleReturnType = false;
- if (FD->getPrimaryTemplate() &&
- !(isa<CXXConstructorDecl>(FD) || isa<CXXDestructorDecl>(FD) ||
- isa<CXXConversionDecl>(FD)))
- MangleReturnType = true;
+ if (FunctionTemplateDecl *PrimaryTemplate = FD->getPrimaryTemplate()) {
+ if (!(isa<CXXConstructorDecl>(FD) || isa<CXXDestructorDecl>(FD) ||
+ isa<CXXConversionDecl>(FD)))
+ MangleReturnType = true;
+
+ // Mangle the type of the primary template.
+ FD = PrimaryTemplate->getTemplatedDecl();
+ }
+
mangleBareFunctionType(FD->getType()->getAsFunctionType(), MangleReturnType);
}
@@ -744,7 +749,6 @@ void CXXNameMangler::mangleType(const TemplateTypeParmType *T) {
}
// FIXME: <type> ::= <template-template-param> <template-args>
-// FIXME: <type> ::= <substitution> # See Compression below
// <type> ::= P <type> # pointer-to
void CXXNameMangler::mangleType(const PointerType *T) {
OpenPOWER on IntegriCloud