diff options
author | Anders Carlsson <andersca@mac.com> | 2009-09-17 03:46:43 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-09-17 03:46:43 +0000 |
commit | 9234b7ff2bb99479fb97d5faa181a55aacf28b78 (patch) | |
tree | 5efde134d40ce5556a75ebea645ca4cdcef22331 /lib/CodeGen/Mangle.cpp | |
parent | 201ce7485c3401adad861fd0979f1bfefc064ff7 (diff) |
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.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82114 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/Mangle.cpp')
-rw-r--r-- | lib/CodeGen/Mangle.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp index 21398677dc..c0451bfa02 100644 --- a/lib/CodeGen/Mangle.cpp +++ b/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) { |