diff options
author | Zachary Turner <zturner@google.com> | 2019-01-08 21:05:51 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2019-01-08 21:05:51 +0000 |
commit | 2fe490052524a6902e267fc72fce3ddcd5060df0 (patch) | |
tree | b5ff22a48838b9ed9fdc131fea262fe7bd61a802 /llvm/lib/Demangle | |
parent | 4e83923d832485ddcbf08cc12b2c59f48fcb7671 (diff) | |
download | bcm5719-llvm-2fe490052524a6902e267fc72fce3ddcd5060df0.tar.gz bcm5719-llvm-2fe490052524a6902e267fc72fce3ddcd5060df0.zip |
[llvm-undname] Add support for demangling msvc's noexcept types.
Starting in C++17, MSVC introduced a new mangling for function
parameters that are themselves noexcept functions. This patch
makes llvm-undname properly demangle them.
Patch by Zachary Henkel
Differential Revision: https://reviews.llvm.org/D55769
llvm-svn: 350656
Diffstat (limited to 'llvm/lib/Demangle')
-rw-r--r-- | llvm/lib/Demangle/MicrosoftDemangle.cpp | 9 | ||||
-rw-r--r-- | llvm/lib/Demangle/MicrosoftDemangleNodes.cpp | 3 |
2 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index cca7bf95a7e..51ffa0bff7f 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -1681,11 +1681,14 @@ TypeNode *Demangler::demangleType(StringView &MangledName, return Ty; } -void Demangler::demangleThrowSpecification(StringView &MangledName) { +bool Demangler::demangleThrowSpecification(StringView &MangledName) { + if (MangledName.consumeFront("_E")) + return true; if (MangledName.consumeFront('Z')) - return; + return false; Error = true; + return false; } FunctionSignatureNode *Demangler::demangleFunctionType(StringView &MangledName, @@ -1709,7 +1712,7 @@ FunctionSignatureNode *Demangler::demangleFunctionType(StringView &MangledName, FTy->Params = demangleFunctionParameterList(MangledName); - demangleThrowSpecification(MangledName); + FTy->IsNoexcept = demangleThrowSpecification(MangledName); return FTy; } diff --git a/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp b/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp index 49518ef57d6..622f8e75e35 100644 --- a/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp @@ -423,6 +423,9 @@ void FunctionSignatureNode::outputPost(OutputStream &OS, if (Quals & Q_Unaligned) OS << " __unaligned"; + if (IsNoexcept) + OS << " noexcept"; + if (RefQualifier == FunctionRefQualifier::Reference) OS << " &"; else if (RefQualifier == FunctionRefQualifier::RValueReference) |