lassefolger updated this revision to Diff 380435. lassefolger added a comment.
rebased after NFC Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D111715/new/ https://reviews.llvm.org/D111715 Files: lldb/source/Core/Mangled.cpp llvm/include/llvm/Demangle/Demangle.h llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h llvm/lib/Demangle/MicrosoftDemangle.cpp llvm/lib/Demangle/MicrosoftDemangleNodes.cpp llvm/test/Demangle/ms-options.test llvm/tools/llvm-undname/llvm-undname.cpp
Index: llvm/tools/llvm-undname/llvm-undname.cpp =================================================================== --- llvm/tools/llvm-undname/llvm-undname.cpp +++ llvm/tools/llvm-undname/llvm-undname.cpp @@ -46,6 +46,9 @@ cl::opt<bool> NoMemberType("no-member-type", cl::Optional, cl::desc("skip member types"), cl::Hidden, cl::init(false), cl::cat(UndNameCategory)); +cl::opt<bool> NoVariableType("no-variable-type", cl::Optional, + cl::desc("skip variable types"), cl::Hidden, + cl::init(false), cl::cat(UndNameCategory)); cl::opt<std::string> RawFile("raw-file", cl::Optional, cl::desc("for fuzzer data"), cl::Hidden, cl::cat(UndNameCategory)); @@ -68,6 +71,8 @@ Flags = MSDemangleFlags(Flags | MSDF_NoReturnType); if (NoMemberType) Flags = MSDemangleFlags(Flags | MSDF_NoMemberType); + if (NoVariableType) + Flags = MSDemangleFlags(Flags | MSDF_NoVariableType); size_t NRead; char *ResultBuf = Index: llvm/test/Demangle/ms-options.test =================================================================== --- llvm/test/Demangle/ms-options.test +++ llvm/test/Demangle/ms-options.test @@ -1,14 +1,43 @@ -; RUN: llvm-undname < %s | FileCheck %s -; RUN: llvm-undname --no-calling-convention < %s | FileCheck %s --check-prefix=CHECK-NO-CALLING-CONV -; RUN: llvm-undname --no-return-type < %s | FileCheck %s --check-prefix=CHECK-NO-RETURN -; RUN: llvm-undname --no-access-specifier < %s | FileCheck %s --check-prefix=CHECK-NO-ACCESS -; RUN: llvm-undname --no-member-type < %s | FileCheck %s --check-prefix=CHECK-NO-MEMBER-TYPE -; RUN: llvm-undname --no-calling-convention --no-return-type --no-access-specifier --no-member-type < %s | FileCheck %s --check-prefix=CHECK-NO-ALL - -?func@MyClass@@UEAAHHH@Z -; CHECK: public: virtual int __cdecl MyClass::func(int, int) -; CHECK-NO-CALLING-CONV: public: virtual int MyClass::func(int, int) -; CHECK-NO-RETURN: public: virtual __cdecl MyClass::func(int, int) -; CHECK-NO-ACCESS: {{^}}virtual int __cdecl MyClass::func(int, int) -; CHECK-NO-MEMBER-TYPE: public: int __cdecl MyClass::func(int, int) -; CHECK-NO-ALL: {{^}}MyClass::func(int, int) +; RUN: llvm-undname < %s | FileCheck %s +; RUN: llvm-undname --no-calling-convention < %s | FileCheck %s --check-prefix=CHECK-NO-CALLING-CONV +; RUN: llvm-undname --no-return-type < %s | FileCheck %s --check-prefix=CHECK-NO-RETURN +; RUN: llvm-undname --no-access-specifier < %s | FileCheck %s --check-prefix=CHECK-NO-ACCESS +; RUN: llvm-undname --no-member-type < %s | FileCheck %s --check-prefix=CHECK-NO-MEMBER-TYPE +; RUN: llvm-undname --no-variable-type < %s | FileCheck %s --check-prefix=CHECK-NO-VARIABLE-TYPE +; RUN: llvm-undname --no-calling-convention --no-return-type --no-access-specifier --no-member-type --no-variable-type < %s | FileCheck %s --check-prefix=CHECK-NO-ALL + +?func@MyClass@@UEAAHHH@Z +; CHECK: public: virtual int __cdecl MyClass::func(int, int) +; CHECK-NO-CALLING-CONV: public: virtual int MyClass::func(int, int) +; CHECK-NO-RETURN: public: virtual __cdecl MyClass::func(int, int) +; CHECK-NO-ACCESS: {{^}}virtual int __cdecl MyClass::func(int, int) +; CHECK-NO-MEMBER-TYPE: public: int __cdecl MyClass::func(int, int) +; CHECK-NO-VARIABLE-TYPE: public: virtual int __cdecl MyClass::func(int, int) +; CHECK-NO-ALL: {{^}}MyClass::func(int, int) + +?array2d@@3PAY09HA +; CHECK: int (*array2d)[10] +; CHECK-NO-CALLING-CONV: int (*array2d)[10] +; CHECK-NO-RETURN: int (*array2d)[10] +; CHECK-NO-ACCESS: int (*array2d)[10] +; CHECK-NO-MEMBER-TYPE: int (*array2d)[10] +; CHECK-NO-VARIABLE-TYPE: array2d +; CHECK-NO-ALL: array2d + +?a@abc@@3PAY09HA +; CHECK: int (*abc::a)[10] +; CHECK-NO-CALLING-CONV: int (*abc::a)[10] +; CHECK-NO-RETURN: int (*abc::a)[10] +; CHECK-NO-ACCESS: int (*abc::a)[10] +; CHECK-NO-MEMBER-TYPE: int (*abc::a)[10] +; CHECK-NO-VARIABLE-TYPE: abc::a +; CHECK-NO-ALL: abc::a + +?x@@3PEAEEA +; CHECK: unsigned char *x +; CHECK-NO-CALLING-CONV: unsigned char *x +; CHECK-NO-RETURN: unsigned char *x +; CHECK-NO-ACCESS: unsigned char *x +; CHECK-NO-MEMBER-TYPE: unsigned char *x +; CHECK-NO-VARIABLE-TYPE: x +; CHECK-NO-ALL: x Index: llvm/lib/Demangle/MicrosoftDemangleNodes.cpp =================================================================== --- llvm/lib/Demangle/MicrosoftDemangleNodes.cpp +++ llvm/lib/Demangle/MicrosoftDemangleNodes.cpp @@ -613,12 +613,12 @@ if (!(Flags & OF_NoMemberType) && IsStatic) OS << "static "; - if (Type) { + if (!(Flags & OF_NoVariableType) && Type) { Type->outputPre(OS, Flags); outputSpaceIfNecessary(OS); } Name->output(OS, Flags); - if (Type) + if (!(Flags & OF_NoVariableType) && Type) Type->outputPost(OS, Flags); } Index: llvm/lib/Demangle/MicrosoftDemangle.cpp =================================================================== --- llvm/lib/Demangle/MicrosoftDemangle.cpp +++ llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -2361,6 +2361,8 @@ OF = OutputFlags(OF | OF_NoReturnType); if (Flags & MSDF_NoMemberType) OF = OutputFlags(OF | OF_NoMemberType); + if (Flags & MSDF_NoVariableType) + OF = OutputFlags(OF | OF_NoVariableType); int InternalStatus = demangle_success; if (D.Error) Index: llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h =================================================================== --- llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h +++ llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h @@ -80,6 +80,7 @@ OF_NoAccessSpecifier = 4, OF_NoMemberType = 8, OF_NoReturnType = 16, + OF_NoVariableType = 32, }; // Types Index: llvm/include/llvm/Demangle/Demangle.h =================================================================== --- llvm/include/llvm/Demangle/Demangle.h +++ llvm/include/llvm/Demangle/Demangle.h @@ -38,6 +38,7 @@ MSDF_NoCallingConvention = 1 << 2, MSDF_NoReturnType = 1 << 3, MSDF_NoMemberType = 1 << 4, + MSDF_NoVariableType = 1 << 5, }; /// Demangles the Microsoft symbol pointed at by mangled_name and returns it. Index: lldb/source/Core/Mangled.cpp =================================================================== --- lldb/source/Core/Mangled.cpp +++ lldb/source/Core/Mangled.cpp @@ -131,9 +131,9 @@ static char *GetMSVCDemangledStr(const char *M) { char *demangled_cstr = llvm::microsoftDemangle( M, nullptr, nullptr, nullptr, nullptr, - llvm::MSDemangleFlags(llvm::MSDF_NoAccessSpecifier | - llvm::MSDF_NoCallingConvention | - llvm::MSDF_NoMemberType)); + llvm::MSDemangleFlags( + llvm::MSDF_NoAccessSpecifier | llvm::MSDF_NoCallingConvention | + llvm::MSDF_NoMemberType | llvm::MSDF_NoVariableType)); if (Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_DEMANGLE)) { if (demangled_cstr && demangled_cstr[0])
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits