From f34be827ac3bb257939e31575fcfc9ef27b94306 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Thu, 9 Apr 2009 23:51:31 +0000 Subject: [PATCH] StringMap::iterator::first() returns a pointer to the first character of the key. This will cause it to create a new std::string, which isn't wanted. Instead, pass back the "const char*". Modify the EmitString() method to take a "const char*". git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68741 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/AsmPrinter.h | 3 ++- lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 6 +++++- lib/CodeGen/AsmPrinter/DwarfWriter.cpp | 6 +++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index 37bc99d492b..f0669badaca 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -285,7 +285,8 @@ namespace llvm { /// Special characters are emitted properly. /// @verbatim (Eg. '\t') @endverbatim void EmitString(const std::string &String) const; - + void EmitString(const char *String, unsigned Size) const; + /// EmitFile - Emit a .file directive. void EmitFile(unsigned Number, const std::string &Name) const; diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 8fc1b8b0195..5ceac3bb4f0 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -727,13 +727,17 @@ static void printStringChar(raw_ostream &O, unsigned char C) { /// Special characters are emitted properly. /// \literal (Eg. '\t') \endliteral void AsmPrinter::EmitString(const std::string &String) const { + EmitString(String.c_str(), String.size()); +} + +void AsmPrinter::EmitString(const char *String, unsigned Size) const { const char* AscizDirective = TAI->getAscizDirective(); if (AscizDirective) O << AscizDirective; else O << TAI->getAsciiDirective(); O << '\"'; - for (unsigned i = 0, N = String.size(); i < N; ++i) + for (unsigned i = 0; i < Size; ++i) printStringChar(O, String[i]); if (AscizDirective) O << '\"'; diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp index 5a721accad8..21bfbe4db30 100644 --- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp @@ -2664,13 +2664,13 @@ private: Asm->EOL("Compilation Unit Length"); StringMap &Globals = Unit->getGlobals(); - for (StringMap::iterator + for (StringMap::const_iterator GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) { - const std::string &Name = GI->first(); + const char *Name = GI->getKeyData(); DIE * Entity = GI->second; Asm->EmitInt32(Entity->getOffset()); Asm->EOL("DIE offset"); - Asm->EmitString(Name); Asm->EOL("External Name"); + Asm->EmitString(Name, strlen(Name)); Asm->EOL("External Name"); } Asm->EmitInt32(0); Asm->EOL("End Mark");