From 2fe490052524a6902e267fc72fce3ddcd5060df0 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Tue, 8 Jan 2019 21:05:51 +0000 Subject: [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 --- llvm/lib/Demangle/MicrosoftDemangle.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Demangle/MicrosoftDemangle.cpp') 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; } -- cgit v1.2.3