diff options
| author | Zachary Turner <zturner@google.com> | 2018-08-10 19:57:36 +0000 |
|---|---|---|
| committer | Zachary Turner <zturner@google.com> | 2018-08-10 19:57:36 +0000 |
| commit | 073620bc3b742f37da0dd9802779994e45e1798c (patch) | |
| tree | dc60a443441e76312776be88c36c43cf26d65b9a /llvm/lib/Demangle | |
| parent | 940e6075e4c1a8b8a1618fdc332b41d5f58a6b5b (diff) | |
| download | bcm5719-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.cpp | 4 |
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 |

