From 1128311a19179ceca799ff0fbc4dd206ab56e560 Mon Sep 17 00:00:00 2001 From: Tim Renouf Date: Mon, 26 Apr 2021 18:49:33 +0100 Subject: [PATCH] [AMDGPU][llvm-objdump] Fix memory leak in recent commit Hopefully stops sanitizer fail in AMDGPU llvm-objdump test. Change-Id: I7331151d1cb65292bd06b6ae283349fe7231cf6b --- llvm/tools/llvm-objdump/llvm-objdump.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 4b2ca6560677..2d5a7287204a 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -975,11 +975,11 @@ collectLocalBranchTargets(ArrayRef Bytes, const MCInstrAnalysis *MIA, // Create an MCSymbolizer for the target and add it to the MCDisassembler. // This is currently only used on AMDGPU, and assumes the format of the // void * argument passed to AMDGPU's createMCSymbolizer. -static void addSymbolizer(MCContext &Ctx, const Target *Target, - StringRef TripleName, MCDisassembler *DisAsm, - uint64_t SectionAddr, ArrayRef Bytes, - SectionSymbolsTy &Symbols, - std::vector &SynthesizedLabelNames) { +static void addSymbolizer( + MCContext &Ctx, const Target *Target, StringRef TripleName, + MCDisassembler *DisAsm, uint64_t SectionAddr, ArrayRef Bytes, + SectionSymbolsTy &Symbols, + std::vector> &SynthesizedLabelNames) { std::unique_ptr RelInfo( Target->createMCRelocationInfo(TripleName, Ctx)); @@ -1015,8 +1015,9 @@ static void addSymbolizer(MCContext &Ctx, const Target *Target, LabelAddrs.begin()); // Add the labels. for (unsigned LabelNum = 0; LabelNum != LabelAddrs.size(); ++LabelNum) { - SynthesizedLabelNames.push_back( - new std::string((Twine("L") + Twine(LabelNum)).str())); + std::unique_ptr Name(new std::string); + *Name = (Twine("L") + Twine(LabelNum)).str(); + SynthesizedLabelNames.push_back(std::move(Name)); Symbols.push_back(SymbolInfoTy( LabelAddrs[LabelNum], *SynthesizedLabelNames.back(), ELF::STT_NOTYPE)); } @@ -1193,7 +1194,7 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj, ArrayRef Bytes = arrayRefFromStringRef( unwrapOrError(Section.getContents(), Obj->getFileName())); - std::vector SynthesizedLabelNames; + std::vector> SynthesizedLabelNames; if (Obj->isELF() && Obj->getArch() == Triple::amdgcn) { // AMDGPU disassembler uses symbolizer for printing labels addSymbolizer(Ctx, TheTarget, TripleName, DisAsm, SectionAddr, Bytes,