diff options
Diffstat (limited to 'lib/MC')
-rw-r--r-- | lib/MC/MCAsmStreamer.cpp | 7 | ||||
-rw-r--r-- | lib/MC/MCContext.cpp | 14 | ||||
-rw-r--r-- | lib/MC/MCDisassembler/Disassembler.cpp | 8 | ||||
-rw-r--r-- | lib/MC/MCDwarf.cpp | 6 | ||||
-rw-r--r-- | lib/MC/MCParser/AsmParser.cpp | 6 |
5 files changed, 25 insertions, 16 deletions
diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp index a3a81a6bc7..da235ec1d3 100644 --- a/lib/MC/MCAsmStreamer.cpp +++ b/lib/MC/MCAsmStreamer.cpp @@ -1175,10 +1175,9 @@ void MCAsmStreamer::AddEncodingComment(const MCInst &Inst, raw_ostream &OS = GetCommentOS(); SmallString<256> Code; SmallVector<MCFixup, 4> Fixups; - { - raw_svector_ostream VecOS(Code); - Emitter->EncodeInstruction(Inst, VecOS, Fixups, STI); - } + raw_svector_ostream VecOS(Code); + Emitter->EncodeInstruction(Inst, VecOS, Fixups, STI); + VecOS.flush(); // If we are showing fixups, create symbolic markers in the encoded // representation. We do this by making a per-bit map to the fixup item index, diff --git a/lib/MC/MCContext.cpp b/lib/MC/MCContext.cpp index 3a8cfaa947..bd2c4e960a 100644 --- a/lib/MC/MCContext.cpp +++ b/lib/MC/MCContext.cpp @@ -140,15 +140,17 @@ MCSymbol *MCContext::GetOrCreateSymbol(const Twine &Name) { } MCSymbol *MCContext::CreateLinkerPrivateTempSymbol() { - small_string_ostream<128> NameSV; - NameSV << MAI->getLinkerPrivateGlobalPrefix() << "tmp" << NextUniqueID++; - return CreateSymbol(NameSV.str()); + SmallString<128> NameSV; + raw_svector_ostream(NameSV) + << MAI->getLinkerPrivateGlobalPrefix() << "tmp" << NextUniqueID++; + return CreateSymbol(NameSV); } MCSymbol *MCContext::CreateTempSymbol() { - small_string_ostream<128> NameSV; - NameSV << MAI->getPrivateGlobalPrefix() << "tmp" << NextUniqueID++; - return CreateSymbol(NameSV.str()); + SmallString<128> NameSV; + raw_svector_ostream(NameSV) + << MAI->getPrivateGlobalPrefix() << "tmp" << NextUniqueID++; + return CreateSymbol(NameSV); } unsigned MCContext::NextInstance(unsigned LocalLabelVal) { diff --git a/lib/MC/MCDisassembler/Disassembler.cpp b/lib/MC/MCDisassembler/Disassembler.cpp index e3ec4eb30d..0530c26369 100644 --- a/lib/MC/MCDisassembler/Disassembler.cpp +++ b/lib/MC/MCDisassembler/Disassembler.cpp @@ -270,7 +270,8 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes, const MCDisassembler *DisAsm = DC->getDisAsm(); MCInstPrinter *IP = DC->getIP(); MCDisassembler::DecodeStatus S; - small_string_ostream<64> Annotations; + SmallVector<char, 64> InsnStr; + raw_svector_ostream Annotations(InsnStr); S = DisAsm->getInstruction(Inst, Size, MemoryObject, PC, /*REMOVE*/ nulls(), Annotations); switch (S) { @@ -280,10 +281,13 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes, return 0; case MCDisassembler::Success: { + Annotations.flush(); + StringRef AnnotationsStr = Annotations.str(); + SmallVector<char, 64> InsnStr; raw_svector_ostream OS(InsnStr); formatted_raw_ostream FormattedOS(OS); - IP->printInst(&Inst, FormattedOS, Annotations.str()); + IP->printInst(&Inst, FormattedOS, AnnotationsStr); if (DC->getOptions() & LLVMDisassembler_Option_PrintLatency) emitLatency(DC, Inst); diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp index eab4d88f25..bddbf578d8 100644 --- a/lib/MC/MCDwarf.cpp +++ b/lib/MC/MCDwarf.cpp @@ -420,7 +420,8 @@ unsigned MCDwarfLineTableHeader::getFile(StringRef &Directory, void MCDwarfLineAddr::Emit(MCStreamer *MCOS, int64_t LineDelta, uint64_t AddrDelta) { MCContext &Context = MCOS->getContext(); - small_string_ostream<256> OS; + SmallString<256> Tmp; + raw_svector_ostream OS(Tmp); MCDwarfLineAddr::Encode(Context, LineDelta, AddrDelta, OS); MCOS->EmitBytes(OS.str()); } @@ -1646,7 +1647,8 @@ void MCDwarfFrameEmitter::Emit(MCObjectStreamer &Streamer, MCAsmBackend *MAB, void MCDwarfFrameEmitter::EmitAdvanceLoc(MCObjectStreamer &Streamer, uint64_t AddrDelta) { MCContext &Context = Streamer.getContext(); - small_string_ostream<256> OS; + SmallString<256> Tmp; + raw_svector_ostream OS(Tmp); MCDwarfFrameEmitter::EncodeAdvanceLoc(Context, AddrDelta, OS); Streamer.EmitBytes(OS.str()); } diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index 7bfbbf4932..fa5dfdc9fe 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -4580,7 +4580,8 @@ bool AsmParser::parseMSInlineAsm( } // Build the IR assembly string. - string_ostream OS; + std::string AsmStringIR; + raw_string_ostream OS(AsmStringIR); const char *AsmStart = SrcMgr.getMemoryBuffer(0)->getBufferStart(); const char *AsmEnd = SrcMgr.getMemoryBuffer(0)->getBufferEnd(); array_pod_sort(AsmStrRewrites.begin(), AsmStrRewrites.end(), rewritesSort); @@ -4645,7 +4646,8 @@ bool AsmParser::parseMSInlineAsm( } case AOK_DotOperator: // Insert the dot if the user omitted it. - if (OS.str().back() != '.') + OS.flush(); + if (AsmStringIR.back() != '.') OS << '.'; OS << AR.Val; break; |