summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/MicrosoftMangle.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-06-11 07:08:37 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-06-11 07:08:37 +0000
commit1918787a72070e22593402657c90cb59fb7a8026 (patch)
treea34cc0d5e3091079b784f3727ddf750c70d0bfba /clang/lib/AST/MicrosoftMangle.cpp
parentd623c528c5fb0f4bbd3b87105fbc5d1487b63444 (diff)
downloadbcm5719-llvm-1918787a72070e22593402657c90cb59fb7a8026.tar.gz
bcm5719-llvm-1918787a72070e22593402657c90cb59fb7a8026.zip
MS ABI: Only class templates get complex nullptr pointer-to-member-functions
r210637 regressed CodeGenCXX/mangle-ms-templates-memptrs.cpp because it did not believe that there is a distinction between class templates and function templates. Sadly, there is. Function templates should behave in a compatible manner with MSVC. llvm-svn: 210642
Diffstat (limited to 'clang/lib/AST/MicrosoftMangle.cpp')
-rw-r--r--clang/lib/AST/MicrosoftMangle.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp
index 481ed44347e..33b81693918 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -1156,13 +1156,16 @@ void MicrosoftCXXNameMangler::mangleTemplateArg(const TemplateDecl *TD,
QualType T = TA.getNullPtrType();
if (const MemberPointerType *MPT = T->getAs<MemberPointerType>()) {
const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
- if (MPT->isMemberFunctionPointerType())
+ if (MPT->isMemberFunctionPointerType() && isa<ClassTemplateDecl>(TD)) {
mangleMemberFunctionPointer(RD, nullptr);
- else
+ return;
+ }
+ if (MPT->isMemberDataPointer()) {
mangleMemberDataPointer(RD, nullptr);
- } else {
- Out << "$0A@";
+ return;
+ }
}
+ Out << "$0A@";
break;
}
case TemplateArgument::Expression:
OpenPOWER on IntegriCloud