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.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210642
91177308-0d34-0410-b5e6-
96231b3b80d8
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: