summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/MicrosoftMangle.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2018-06-11 06:54:23 +0000
committerHans Wennborg <hans@hanshq.net>2018-06-11 06:54:23 +0000
commit4cae35f6e479281a8de9914f4e4526df8cb07cc8 (patch)
tree3ae67ca1bcba3d0801040ac5ac7d3f03f907740b /clang/lib/AST/MicrosoftMangle.cpp
parent5e403b2981a663a7ac478e7b77fd857d59a37d93 (diff)
downloadbcm5719-llvm-4cae35f6e479281a8de9914f4e4526df8cb07cc8.tar.gz
bcm5719-llvm-4cae35f6e479281a8de9914f4e4526df8cb07cc8.zip
[MS ABI] Mangle unnamed empty enums (PR37723)
Differential Revision: https://reviews.llvm.org/D47875 llvm-svn: 334388
Diffstat (limited to 'clang/lib/AST/MicrosoftMangle.cpp')
-rw-r--r--clang/lib/AST/MicrosoftMangle.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp
index e9474791961..94e41991c9b 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -884,11 +884,13 @@ void MicrosoftCXXNameMangler::mangleUnqualifiedName(const NamedDecl *ND,
// associate typedef mangled in if they have one.
Name += "<unnamed-type-";
Name += TND->getName();
- } else if (auto *ED = dyn_cast<EnumDecl>(TD)) {
- auto EnumeratorI = ED->enumerator_begin();
- assert(EnumeratorI != ED->enumerator_end());
+ } else if (isa<EnumDecl>(TD) &&
+ cast<EnumDecl>(TD)->enumerator_begin() !=
+ cast<EnumDecl>(TD)->enumerator_end()) {
+ // Anonymous non-empty enums mangle in the first enumerator.
+ auto *ED = cast<EnumDecl>(TD);
Name += "<unnamed-enum-";
- Name += EnumeratorI->getName();
+ Name += ED->enumerator_begin()->getName();
} else {
// Otherwise, number the types using a $S prefix.
Name += "<unnamed-type-$S";
OpenPOWER on IntegriCloud