From 1d8cdbb64b2eee6c8116418a8920466ac8c6eeb4 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Tue, 10 Oct 2017 00:50:29 +0000 Subject: [PATCH] [MC] Plumb unique_ptr through createWinCOFFObjectWriter to WinCOFFObjectWriter's constructor. Fixes the same ownership issue for COFF that r315245 did for MachO: WinCOFFObjectWriter takes ownership of its MCWinCOFFObjectTargetWriter, so we want to pass this through to the constructor via a unique_ptr, rather than a raw ptr. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315257 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCWinCOFFObjectWriter.h | 5 +++-- lib/MC/WinCOFFObjectWriter.cpp | 16 ++++++++-------- .../AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp | 4 ++-- lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp | 4 ++-- lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp | 4 ++-- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/include/llvm/MC/MCWinCOFFObjectWriter.h b/include/llvm/MC/MCWinCOFFObjectWriter.h index 198a08b5f53..a20c64f0949 100644 --- a/include/llvm/MC/MCWinCOFFObjectWriter.h +++ b/include/llvm/MC/MCWinCOFFObjectWriter.h @@ -42,8 +42,9 @@ class raw_pwrite_stream; /// \param MOTW - The target specific WinCOFF writer subclass. /// \param OS - The stream to write to. /// \returns The constructed object writer. - MCObjectWriter *createWinCOFFObjectWriter(MCWinCOFFObjectTargetWriter *MOTW, - raw_pwrite_stream &OS); + MCObjectWriter * + createWinCOFFObjectWriter(std::unique_ptr MOTW, + raw_pwrite_stream &OS); } // end namespace llvm #endif // LLVM_MC_MCWINCOFFOBJECTWRITER_H diff --git a/lib/MC/WinCOFFObjectWriter.cpp b/lib/MC/WinCOFFObjectWriter.cpp index 956ae70b38d..64f7317cf49 100644 --- a/lib/MC/WinCOFFObjectWriter.cpp +++ b/lib/MC/WinCOFFObjectWriter.cpp @@ -145,7 +145,8 @@ public: bool UseBigObj; - WinCOFFObjectWriter(MCWinCOFFObjectTargetWriter *MOTW, raw_pwrite_stream &OS); + WinCOFFObjectWriter(std::unique_ptr MOTW, + raw_pwrite_stream &OS); void reset() override { memset(&Header, 0, sizeof(Header)); @@ -222,9 +223,9 @@ void COFFSymbol::set_name_offset(uint32_t Offset) { //------------------------------------------------------------------------------ // WinCOFFObjectWriter class implementation -WinCOFFObjectWriter::WinCOFFObjectWriter(MCWinCOFFObjectTargetWriter *MOTW, - raw_pwrite_stream &OS) - : MCObjectWriter(OS, true), TargetObjectWriter(MOTW) { +WinCOFFObjectWriter::WinCOFFObjectWriter( + std::unique_ptr MOTW, raw_pwrite_stream &OS) + : MCObjectWriter(OS, true), TargetObjectWriter(std::move(MOTW)) { Header.Machine = TargetObjectWriter->getMachine(); } @@ -1084,8 +1085,7 @@ void MCWinCOFFObjectTargetWriter::anchor() {} //------------------------------------------------------------------------------ // WinCOFFObjectWriter factory function -MCObjectWriter * -llvm::createWinCOFFObjectWriter(MCWinCOFFObjectTargetWriter *MOTW, - raw_pwrite_stream &OS) { - return new WinCOFFObjectWriter(MOTW, OS); +MCObjectWriter *llvm::createWinCOFFObjectWriter( + std::unique_ptr MOTW, raw_pwrite_stream &OS) { + return new WinCOFFObjectWriter(std::move(MOTW), OS); } diff --git a/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp b/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp index 31762b9e4cd..b4db36fa29c 100644 --- a/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp +++ b/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp @@ -97,8 +97,8 @@ bool AArch64WinCOFFObjectWriter::recordRelocation(const MCFixup &Fixup) const { namespace llvm { MCObjectWriter *createAArch64WinCOFFObjectWriter(raw_pwrite_stream &OS) { - MCWinCOFFObjectTargetWriter *MOTW = new AArch64WinCOFFObjectWriter(); - return createWinCOFFObjectWriter(MOTW, OS); + auto MOTW = llvm::make_unique(); + return createWinCOFFObjectWriter(std::move(MOTW), OS); } } // end namespace llvm diff --git a/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp b/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp index f74fb2e20b5..0438020ce81 100644 --- a/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp +++ b/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp @@ -92,8 +92,8 @@ namespace llvm { MCObjectWriter *createARMWinCOFFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit) { - MCWinCOFFObjectTargetWriter *MOTW = new ARMWinCOFFObjectWriter(Is64Bit); - return createWinCOFFObjectWriter(MOTW, OS); + auto MOTW = llvm::make_unique(Is64Bit); + return createWinCOFFObjectWriter(std::move(MOTW), OS); } } // end namespace llvm diff --git a/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp b/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp index 807f7a6ddb1..d138bdc8d39 100644 --- a/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp +++ b/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp @@ -106,6 +106,6 @@ unsigned X86WinCOFFObjectWriter::getRelocType(MCContext &Ctx, MCObjectWriter *llvm::createX86WinCOFFObjectWriter(raw_pwrite_stream &OS, bool Is64Bit) { - MCWinCOFFObjectTargetWriter *MOTW = new X86WinCOFFObjectWriter(Is64Bit); - return createWinCOFFObjectWriter(MOTW, OS); + auto MOTW = llvm::make_unique(Is64Bit); + return createWinCOFFObjectWriter(std::move(MOTW), OS); } -- 2.11.0