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])
-; 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\r
+; RUN: llvm-undname --no-calling-convention < %s | FileCheck %s --check-prefix=CHECK-NO-CALLING-CONV\r
+; RUN: llvm-undname --no-return-type < %s | FileCheck %s --check-prefix=CHECK-NO-RETURN\r
+; RUN: llvm-undname --no-access-specifier < %s | FileCheck %s --check-prefix=CHECK-NO-ACCESS\r
+; RUN: llvm-undname --no-member-type < %s | FileCheck %s --check-prefix=CHECK-NO-MEMBER-TYPE\r
+; RUN: llvm-undname --no-variable-type < %s | FileCheck %s --check-prefix=CHECK-NO-VARIABLE-TYPE\r
+; 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\r
+\r
+?func@MyClass@@UEAAHHH@Z\r
+; CHECK: public: virtual int __cdecl MyClass::func(int, int)\r
+; CHECK-NO-CALLING-CONV: public: virtual int MyClass::func(int, int)\r
+; CHECK-NO-RETURN: public: virtual __cdecl MyClass::func(int, int)\r
+; CHECK-NO-ACCESS: {{^}}virtual int __cdecl MyClass::func(int, int)\r
+; CHECK-NO-MEMBER-TYPE: public: int __cdecl MyClass::func(int, int)\r
+; CHECK-NO-VARIABLE-TYPE: public: virtual int __cdecl MyClass::func(int, int)\r
+; CHECK-NO-ALL: {{^}}MyClass::func(int, int)\r
+\r
+?array2d@@3PAY09HA\r
+; CHECK: int (*array2d)[10]\r
+; CHECK-NO-CALLING-CONV: int (*array2d)[10]\r
+; CHECK-NO-RETURN: int (*array2d)[10]\r
+; CHECK-NO-ACCESS: int (*array2d)[10]\r
+; CHECK-NO-MEMBER-TYPE: int (*array2d)[10]\r
+; CHECK-NO-VARIABLE-TYPE: array2d\r
+; CHECK-NO-ALL: array2d\r
+\r
+?a@abc@@3PAY09HA\r
+; CHECK: int (*abc::a)[10]\r
+; CHECK-NO-CALLING-CONV: int (*abc::a)[10]\r
+; CHECK-NO-RETURN: int (*abc::a)[10]\r
+; CHECK-NO-ACCESS: int (*abc::a)[10]\r
+; CHECK-NO-MEMBER-TYPE: int (*abc::a)[10]\r
+; CHECK-NO-VARIABLE-TYPE: abc::a\r
+; CHECK-NO-ALL: abc::a\r
+\r
+?x@@3PEAEEA\r
+; CHECK: unsigned char *x\r
+; CHECK-NO-CALLING-CONV: unsigned char *x\r
+; CHECK-NO-RETURN: unsigned char *x\r
+; CHECK-NO-ACCESS: unsigned char *x\r
+; CHECK-NO-MEMBER-TYPE: unsigned char *x\r
+; CHECK-NO-VARIABLE-TYPE: x\r
+; CHECK-NO-ALL: x\r
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));
Flags = MSDemangleFlags(Flags | MSDF_NoReturnType);
if (NoMemberType)
Flags = MSDemangleFlags(Flags | MSDF_NoMemberType);
+ if (NoVariableType)
+ Flags = MSDemangleFlags(Flags | MSDF_NoVariableType);
size_t NRead;
char *ResultBuf =