summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Demangle
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2018-08-10 19:57:36 +0000
committerZachary Turner <zturner@google.com>2018-08-10 19:57:36 +0000
commit073620bc3b742f37da0dd9802779994e45e1798c (patch)
treedc60a443441e76312776be88c36c43cf26d65b9a /llvm/lib/Demangle
parent940e6075e4c1a8b8a1618fdc332b41d5f58a6b5b (diff)
downloadbcm5719-llvm-073620bc3b742f37da0dd9802779994e45e1798c.tar.gz
bcm5719-llvm-073620bc3b742f37da0dd9802779994e45e1798c.zip
[MS Demangler] Demangle cv qualifiers on template args.
Before we wouldn't properly demangle something like Foo<const int>. Template args have a special escape sequence '$$C' that is optional, but if it is present contains qualifiers. So we need to check for this and only if it present, demangle qualifiers before demangling the type. With this fix, we re-enable some tests that were previously marked FIXME. llvm-svn: 339465
Diffstat (limited to 'llvm/lib/Demangle')
-rw-r--r--llvm/lib/Demangle/MicrosoftDemangle.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp
index 13f2a2c02e1..d9aed6499fb 100644
--- a/llvm/lib/Demangle/MicrosoftDemangle.cpp
+++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp
@@ -2101,6 +2101,10 @@ Demangler::demangleTemplateParameterList(StringView &MangledName) {
// Array
(*Current)->ParamType =
demangleType(MangledName, QualifierMangleMode::Drop);
+ } else if (MangledName.consumeFront("$$C")) {
+ // Type has qualifiers.
+ (*Current)->ParamType =
+ demangleType(MangledName, QualifierMangleMode::Mangle);
} else if (MangledName.startsWith("$1?")) {
MangledName.consumeFront("$1");
// Pointer to symbol
OpenPOWER on IntegriCloud