StringMap<DIE*>::iterator::first() returns a pointer to the first character of
authorBill Wendling <isanbard@gmail.com>
Thu, 9 Apr 2009 23:51:31 +0000 (23:51 +0000)
committerBill Wendling <isanbard@gmail.com>
Thu, 9 Apr 2009 23:51:31 +0000 (23:51 +0000)
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
lib/CodeGen/AsmPrinter/AsmPrinter.cpp
lib/CodeGen/AsmPrinter/DwarfWriter.cpp

index 37bc99d492bc375abfb92f149418de8a198774df..f0669badaca50f5cb7887bad671932e23c94fcb0 100644 (file)
@@ -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;
 
index 8fc1b8b01955bcd40c9470afa22befd766bc1736..5ceac3bb4f0ee233c80993e48e6d0969e568274d 100644 (file)
@@ -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 << '\"';
index 5a721accad8e4351212b94746731722e9b1d9d3b..21bfbe4db3052127a9b6285bb27324d09981fa05 100644 (file)
@@ -2664,13 +2664,13 @@ private:
     Asm->EOL("Compilation Unit Length");
       
     StringMap<DIE*> &Globals = Unit->getGlobals();
-    for (StringMap<DIE*>::iterator
+    for (StringMap<DIE*>::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");