[Demangle] remove unused status param of itaniumDemangle

No call sites interpreted this value meaningfully. Simplify this
interface.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D149707
This commit is contained in:
Nick Desaulniers 2023-05-03 11:51:31 -07:00
parent b9efffa7e9
commit 3b01fa264c
9 changed files with 27 additions and 46 deletions

View File

@ -28,7 +28,10 @@ enum : int {
demangle_success = 0,
};
char *itaniumDemangle(const char *mangled_name, int *status);
/// Returns a non-NULL pointer to a NUL-terminated C style string
/// that should be explicitly freed, if successful. Otherwise, may return
/// nullptr if mangled_name is not a valid mangling or is nullptr.
char *itaniumDemangle(const char *mangled_name);
enum MSDemangleFlags {
MSDF_None = 0,

View File

@ -48,7 +48,7 @@ std::string llvm::demangle(const std::string &MangledName) {
bool llvm::nonMicrosoftDemangle(const char *MangledName, std::string &Result) {
char *Demangled = nullptr;
if (isItaniumEncoding(MangledName))
Demangled = itaniumDemangle(MangledName, nullptr);
Demangled = itaniumDemangle(MangledName);
else if (isRustEncoding(MangledName))
Demangled = rustDemangle(MangledName);
else if (isDLangEncoding(MangledName))

View File

@ -365,31 +365,20 @@ public:
using Demangler = itanium_demangle::ManglingParser<DefaultAllocator>;
char *llvm::itaniumDemangle(const char *MangledName, int *Status) {
if (MangledName == nullptr) {
if (Status)
*Status = demangle_invalid_args;
char *llvm::itaniumDemangle(const char *MangledName) {
if (!MangledName)
return nullptr;
}
int InternalStatus = demangle_success;
Demangler Parser(MangledName, MangledName + std::strlen(MangledName));
Node *AST = Parser.parse();
if (!AST)
return nullptr;
char *Buf;
if (AST == nullptr)
InternalStatus = demangle_invalid_mangled_name;
else {
OutputBuffer OB;
assert(Parser.ForwardTemplateRefs.empty());
AST->print(OB);
OB += '\0';
Buf = OB.getBuffer();
}
if (Status)
*Status = InternalStatus;
return InternalStatus == demangle_success ? Buf : nullptr;
OutputBuffer OB;
assert(Parser.ForwardTemplateRefs.empty());
AST->print(OB);
OB += '\0';
return OB.getBuffer();
}
ItaniumPartialDemangler::ItaniumPartialDemangler()

View File

@ -337,10 +337,8 @@ StringRef GCOVFunction::getName(bool demangle) const {
if (demangled.empty()) {
do {
if (Name.startswith("_Z")) {
int status = 0;
// Name is guaranteed to be NUL-terminated.
char *res = itaniumDemangle(Name.data(), &status);
if (status == 0) {
if (char *res = itaniumDemangle(Name.data())) {
demangled = res;
free(res);
break;

View File

@ -652,13 +652,12 @@ void llvm::sys::PrintStackTrace(raw_ostream &OS, int Depth) {
if (dlinfo.dli_sname != nullptr) {
OS << ' ';
int res;
char *d = itaniumDemangle(dlinfo.dli_sname, &res);
if (!d)
OS << dlinfo.dli_sname;
else
if (char *d = itaniumDemangle(dlinfo.dli_sname)) {
OS << d;
free(d);
free(d);
} else {
OS << dlinfo.dli_sname;
}
OS << format(" + %tu", (static_cast<const char *>(StackTrace[i]) -
static_cast<const char *>(dlinfo.dli_saddr)));

View File

@ -84,11 +84,11 @@ static std::string demangle(const std::string &Mangled) {
char *Undecorated = nullptr;
if (Types)
Undecorated = itaniumDemangle(DecoratedStr, nullptr);
Undecorated = itaniumDemangle(DecoratedStr);
if (!Undecorated && strncmp(DecoratedStr, "__imp_", 6) == 0) {
Prefix = "import thunk for ";
Undecorated = itaniumDemangle(DecoratedStr + 6, nullptr);
Undecorated = itaniumDemangle(DecoratedStr + 6);
}
Result = Undecorated ? Prefix + Undecorated : Mangled;

View File

@ -14,9 +14,7 @@
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
std::string NullTerminatedString((const char *)Data, Size);
int status = 0;
if (char *demangle =
llvm::itaniumDemangle(NullTerminatedString.c_str(), &status))
if (char *demangle = llvm::itaniumDemangle(NullTerminatedString.c_str()))
free(demangle);
return 0;

View File

@ -7280,8 +7280,7 @@ static const char *SymbolizerSymbolLookUp(void *DisInfo,
} else if (SymbolName != nullptr && strncmp(SymbolName, "__Z", 3) == 0) {
if (info->demangled_name != nullptr)
free(info->demangled_name);
int status;
info->demangled_name = itaniumDemangle(SymbolName + 1, &status);
info->demangled_name = itaniumDemangle(SymbolName + 1);
if (info->demangled_name != nullptr) {
*ReferenceName = info->demangled_name;
*ReferenceType = LLVMDisassembler_ReferenceType_DeMangled_Name;
@ -7379,8 +7378,7 @@ static const char *SymbolizerSymbolLookUp(void *DisInfo,
} else if (SymbolName != nullptr && strncmp(SymbolName, "__Z", 3) == 0) {
if (info->demangled_name != nullptr)
free(info->demangled_name);
int status;
info->demangled_name = itaniumDemangle(SymbolName + 1, &status);
info->demangled_name = itaniumDemangle(SymbolName + 1);
if (info->demangled_name != nullptr) {
*ReferenceName = info->demangled_name;
*ReferenceType = LLVMDisassembler_ReferenceType_DeMangled_Name;

View File

@ -338,15 +338,11 @@ static bool writeReport(LocationInfoTy &LocationInfo) {
bool Printed = false;
if (!NoDemangle) {
int Status = 0;
char *Demangled = itaniumDemangle(FuncName.c_str(), &Status);
if (Demangled && Status == 0) {
if (char *Demangled = itaniumDemangle(FuncName.c_str())) {
OS << Demangled;
Printed = true;
}
if (Demangled)
std::free(Demangled);
}
}
if (!Printed)