summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/MicrosoftMangle.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-07-30 08:20:03 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-07-30 08:20:03 +0000
commit8d5f9ab2cc2a76d490ffc6317d9552b05901ff63 (patch)
treebe791e083c00be93430821e3122644b58db3a29e /clang/lib/AST/MicrosoftMangle.cpp
parent5c72938c39f97672f0557069cfcce9dd95446477 (diff)
downloadbcm5719-llvm-8d5f9ab2cc2a76d490ffc6317d9552b05901ff63.tar.gz
bcm5719-llvm-8d5f9ab2cc2a76d490ffc6317d9552b05901ff63.zip
MS ABI: Mangle alias templates used as template-template arguments
A templated using declaration may be used as a template-template argument. Unfortunately, the VS "14" chooses '?' as the sole marker for the argument. This is problematic because it presupposes the possibility of using more than one template-aliases as arguments to the same template. This fixes PR20047. llvm-svn: 214290
Diffstat (limited to 'clang/lib/AST/MicrosoftMangle.cpp')
-rw-r--r--clang/lib/AST/MicrosoftMangle.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp
index e6a6d09b484..0c80ff814c7 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -1179,11 +1179,21 @@ void MicrosoftCXXNameMangler::mangleTemplateArg(const TemplateDecl *TD,
}
break;
}
- case TemplateArgument::Template:
- mangleType(cast<TagDecl>(
- TA.getAsTemplate().getAsTemplateDecl()->getTemplatedDecl()));
+ case TemplateArgument::Template: {
+ const NamedDecl *ND =
+ TA.getAsTemplate().getAsTemplateDecl()->getTemplatedDecl();
+ if (const auto *TD = dyn_cast<TagDecl>(ND)) {
+ mangleType(TD);
+ } else if (isa<TypeAliasDecl>(ND)) {
+ // FIXME: The mangling, while compatible with VS "14", is horribly
+ // broken. Update this when they release their next compiler.
+ Out << '?';
+ } else {
+ llvm_unreachable("unexpected template template NamedDecl!");
+ }
break;
}
+ }
}
void MicrosoftCXXNameMangler::mangleQualifiers(Qualifiers Quals,
OpenPOWER on IntegriCloud