[llvm-commits] CVS: llvm/lib/Bytecode/Reader/ArchiveReader.cpp

John Criswell criswell at cs.uiuc.edu
Sat Dec 20 16:38:04 PST 2003


Changes in directory llvm/lib/Bytecode/Reader:

ArchiveReader.cpp updated: 1.11 -> 1.12

---
Log message:

Fix PR#193.

Modified ReadArchiveBuffer() so that it dynamically allocates the
std::string object used to hold the bytecode object file's name.  This is
necessary because it is passed by reference to the new Module that is
allocated to represent the bytecode object, and previously we were
using a std::string that disappeared on function exit.



---
Diffs of the changes:  (+12 -3)

Index: llvm/lib/Bytecode/Reader/ArchiveReader.cpp
diff -u llvm/lib/Bytecode/Reader/ArchiveReader.cpp:1.11 llvm/lib/Bytecode/Reader/ArchiveReader.cpp:1.12
--- llvm/lib/Bytecode/Reader/ArchiveReader.cpp:1.11	Tue Dec 16 18:18:18 2003
+++ llvm/lib/Bytecode/Reader/ArchiveReader.cpp	Sat Dec 20 16:37:29 2003
@@ -122,8 +122,17 @@
       while (endp[-1] == ' ')
         --endp;
     }
+
+    //
+    // We now have the beginning and the end of the object name.
+    // Convert this into a dynamically allocated std::string to pass
+    // to the routines that create the Module object.  We do this
+    // (I think) because the created Module object will outlive this function,
+    // but statically declared std::string's won't.
+    //
     std::string MemberName (startp, endp);
-    std::string FullMemberName = ArchiveName + "(" + MemberName + ")";
+    std::string * FullMemberName;
+    FullMemberName = new std::string (ArchiveName + "(" + MemberName + ")");
 
     switch (getObjectType(Hdr, MemberData, MemberSize)) {
     case SVR4LongFilename:
@@ -133,7 +142,7 @@
       break;
     case UserObject: {
       Module *M = ParseBytecodeBuffer(MemberData, MemberSize,
-                                      FullMemberName, ErrorStr);
+                                      *(FullMemberName), ErrorStr);
       if (!M) return true;
       Objects.push_back(M);
       break;
@@ -144,7 +153,7 @@
       break;
     default:
       std::cerr << "ReadArchiveBuffer: WARNING: Skipping unknown file: "
-                << FullMemberName << "\n";
+                << *(FullMemberName) << "\n";
       break;   // Just ignore unknown files.
     }
 





More information about the llvm-commits mailing list