aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Demangle/MicrosoftDemangle.cpp
diff options
context:
space:
mode:
authorMax Winkler <max.enrico.winkler@gmail.com>2024-07-04 10:17:32 -0700
committerGitHub <noreply@github.com>2024-07-04 10:17:32 -0700
commitd1dc4169838381688a74f245cdaedbe9fce13848 (patch)
treed162c82bc14d163133be58dca6a20e006b796579 /llvm/lib/Demangle/MicrosoftDemangle.cpp
parent4f77677c3b383da99e46fdb29e7b8de63eb72447 (diff)
downloadllvm-d1dc4169838381688a74f245cdaedbe9fce13848.zip
llvm-d1dc4169838381688a74f245cdaedbe9fce13848.tar.gz
llvm-d1dc4169838381688a74f245cdaedbe9fce13848.tar.bz2
Fix MSVC 1920+ auto NTTP mangling for pointers to members (#97007)
Fixes https://github.com/llvm/llvm-project/issues/70899. This is a continuation of https://github.com/llvm/llvm-project/pull/92477 for pointers to member data and pointers to member functions. The mangled name must be prefixed with `$M <mangled-type>` for the deduced type of the nttp parameter.
Diffstat (limited to 'llvm/lib/Demangle/MicrosoftDemangle.cpp')
-rw-r--r--llvm/lib/Demangle/MicrosoftDemangle.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp
index e18de9a..c5835e8 100644
--- a/llvm/lib/Demangle/MicrosoftDemangle.cpp
+++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp
@@ -2343,12 +2343,13 @@ Demangler::demangleTemplateParameterList(std::string_view &MangledName) {
TP.N = TPRN = Arena.alloc<TemplateParameterReferenceNode>();
TPRN->Symbol = parse(MangledName);
TPRN->Affinity = PointerAffinity::Reference;
- } else if (llvm::itanium_demangle::starts_with(MangledName, "$F") ||
- llvm::itanium_demangle::starts_with(MangledName, "$G")) {
+ } else if (startsWith(MangledName, "$F", "F", !IsAutoNTTP) ||
+ startsWith(MangledName, "$G", "G", !IsAutoNTTP)) {
TP.N = TPRN = Arena.alloc<TemplateParameterReferenceNode>();
// Data member pointer.
- MangledName.remove_prefix(1);
+ if (!IsAutoNTTP)
+ MangledName.remove_prefix(1); // Remove leading '$'
char InheritanceSpecifier = MangledName.front();
MangledName.remove_prefix(1);