diff options
author | Lang Hames <lhames@gmail.com> | 2017-10-11 23:34:47 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2017-10-11 23:34:47 +0000 |
commit | 806f68bbab5118c0252fdeaf1d84fc17ba9dae5c (patch) | |
tree | 0b21d2104360bf513e4c2b374c4c321cd8be6ffa /lib/MC | |
parent | dc62a47c34a9bc82054e4e221c10c4592c89eea3 (diff) |
[MC] Have MCObjectStreamer take its MCAsmBackend argument via unique_ptr.
MCObjectStreamer owns its MCCodeEmitter -- this fixes the types to reflect that,
and allows us to remove the last instance of MCObjectStreamer's weird "holding
ownership via someone else's reference" trick.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315531 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC')
-rw-r--r-- | lib/MC/MCELFStreamer.cpp | 11 | ||||
-rw-r--r-- | lib/MC/MCMachOStreamer.cpp | 12 | ||||
-rw-r--r-- | lib/MC/MCObjectStreamer.cpp | 11 | ||||
-rw-r--r-- | lib/MC/MCWasmStreamer.cpp | 6 | ||||
-rw-r--r-- | lib/MC/MCWinCOFFStreamer.cpp | 6 |
5 files changed, 27 insertions, 19 deletions
diff --git a/lib/MC/MCELFStreamer.cpp b/lib/MC/MCELFStreamer.cpp index 4fdbcd7511c..366125962a5 100644 --- a/lib/MC/MCELFStreamer.cpp +++ b/lib/MC/MCELFStreamer.cpp @@ -41,8 +41,9 @@ using namespace llvm; MCELFStreamer::MCELFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> TAB, - raw_pwrite_stream &OS, MCCodeEmitter *Emitter) - : MCObjectStreamer(Context, std::move(TAB), OS, Emitter) {} + raw_pwrite_stream &OS, + std::unique_ptr<MCCodeEmitter> Emitter) + : MCObjectStreamer(Context, std::move(TAB), OS, std::move(Emitter)) {} bool MCELFStreamer::isBundleLocked() const { return getCurrentSectionOnly()->isBundleLocked(); @@ -646,9 +647,11 @@ void MCELFStreamer::EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, MCStreamer *llvm::createELFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> &&MAB, - raw_pwrite_stream &OS, MCCodeEmitter *CE, + raw_pwrite_stream &OS, + std::unique_ptr<MCCodeEmitter> &&CE, bool RelaxAll) { - MCELFStreamer *S = new MCELFStreamer(Context, std::move(MAB), OS, CE); + MCELFStreamer *S = + new MCELFStreamer(Context, std::move(MAB), OS, std::move(CE)); if (RelaxAll) S->getAssembler().setRelaxAll(true); return S; diff --git a/lib/MC/MCMachOStreamer.cpp b/lib/MC/MCMachOStreamer.cpp index 293b87d4177..a5c1b13df7c 100644 --- a/lib/MC/MCMachOStreamer.cpp +++ b/lib/MC/MCMachOStreamer.cpp @@ -63,9 +63,9 @@ private: public: MCMachOStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> MAB, - raw_pwrite_stream &OS, MCCodeEmitter *Emitter, + raw_pwrite_stream &OS, std::unique_ptr<MCCodeEmitter> Emitter, bool DWARFMustBeAtTheEnd, bool label) - : MCObjectStreamer(Context, std::move(MAB), OS, Emitter), + : MCObjectStreamer(Context, std::move(MAB), OS, std::move(Emitter)), LabelSections(label), DWARFMustBeAtTheEnd(DWARFMustBeAtTheEnd), CreatedADWARFSection(false) {} @@ -487,11 +487,13 @@ void MCMachOStreamer::FinishImpl() { MCStreamer *llvm::createMachOStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> &&MAB, - raw_pwrite_stream &OS, MCCodeEmitter *CE, + raw_pwrite_stream &OS, + std::unique_ptr<MCCodeEmitter> &&CE, bool RelaxAll, bool DWARFMustBeAtTheEnd, bool LabelSections) { - MCMachOStreamer *S = new MCMachOStreamer(Context, std::move(MAB), OS, CE, - DWARFMustBeAtTheEnd, LabelSections); + MCMachOStreamer *S = + new MCMachOStreamer(Context, std::move(MAB), OS, std::move(CE), + DWARFMustBeAtTheEnd, LabelSections); const Triple &TT = Context.getObjectFileInfo()->getTargetTriple(); if (TT.isOSDarwin()) { unsigned Major, Minor, Update; diff --git a/lib/MC/MCObjectStreamer.cpp b/lib/MC/MCObjectStreamer.cpp index ba45d24fd08..2fd969de296 100644 --- a/lib/MC/MCObjectStreamer.cpp +++ b/lib/MC/MCObjectStreamer.cpp @@ -28,15 +28,14 @@ using namespace llvm; MCObjectStreamer::MCObjectStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> TAB, raw_pwrite_stream &OS, - MCCodeEmitter *Emitter_) + std::unique_ptr<MCCodeEmitter> Emitter) : MCStreamer(Context), ObjectWriter(TAB->createObjectWriter(OS)), - TAB(std::move(TAB)), Assembler(llvm::make_unique<MCAssembler>( - Context, *this->TAB, *Emitter_, *ObjectWriter)), + TAB(std::move(TAB)), Emitter(std::move(Emitter)), + Assembler(llvm::make_unique<MCAssembler>(Context, *this->TAB, + *this->Emitter, *ObjectWriter)), EmitEHFrame(true), EmitDebugFrame(false) {} -MCObjectStreamer::~MCObjectStreamer() { - delete &Assembler->getEmitter(); -} +MCObjectStreamer::~MCObjectStreamer() {} void MCObjectStreamer::flushPendingLabels(MCFragment *F, uint64_t FOffset) { if (PendingLabels.empty()) diff --git a/lib/MC/MCWasmStreamer.cpp b/lib/MC/MCWasmStreamer.cpp index fdf1be67e4e..1262e891f5e 100644 --- a/lib/MC/MCWasmStreamer.cpp +++ b/lib/MC/MCWasmStreamer.cpp @@ -202,9 +202,11 @@ void MCWasmStreamer::FinishImpl() { MCStreamer *llvm::createWasmStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> &&MAB, - raw_pwrite_stream &OS, MCCodeEmitter *CE, + raw_pwrite_stream &OS, + std::unique_ptr<MCCodeEmitter> &&CE, bool RelaxAll) { - MCWasmStreamer *S = new MCWasmStreamer(Context, std::move(MAB), OS, CE); + MCWasmStreamer *S = + new MCWasmStreamer(Context, std::move(MAB), OS, std::move(CE)); if (RelaxAll) S->getAssembler().setRelaxAll(true); return S; diff --git a/lib/MC/MCWinCOFFStreamer.cpp b/lib/MC/MCWinCOFFStreamer.cpp index c78a2e17c8d..7e0533b8e00 100644 --- a/lib/MC/MCWinCOFFStreamer.cpp +++ b/lib/MC/MCWinCOFFStreamer.cpp @@ -43,8 +43,10 @@ using namespace llvm; MCWinCOFFStreamer::MCWinCOFFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> MAB, - MCCodeEmitter &CE, raw_pwrite_stream &OS) - : MCObjectStreamer(Context, std::move(MAB), OS, &CE), CurSymbol(nullptr) {} + std::unique_ptr<MCCodeEmitter> CE, + raw_pwrite_stream &OS) + : MCObjectStreamer(Context, std::move(MAB), OS, std::move(CE)), + CurSymbol(nullptr) {} void MCWinCOFFStreamer::EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI) { |