Fix the OProfileJITEventListener for StringRef being returned from debug info.
authorJeffrey Yasskin <jyasskin@google.com>
Mon, 7 Dec 2009 22:32:38 +0000 (22:32 +0000)
committerJeffrey Yasskin <jyasskin@google.com>
Mon, 7 Dec 2009 22:32:38 +0000 (22:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90813 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/JIT/OProfileJITEventListener.cpp

index b45c71f4fd76f5f9ad313786bf74dfcc23d83661..076e5a0ce7b568e67f6dd6dd10dc651667a3e649 100644 (file)
@@ -69,24 +69,18 @@ OProfileJITEventListener::~OProfileJITEventListener() {
 }
 
 class FilenameCache {
-  // Holds the filename of each Scope, so that we can pass the
-  // pointer into oprofile.  These char*s are freed in the destructor.
-  DenseMap<MDNode*, char*> Filenames;
+  // Holds the filename of each Scope, so that we can pass a null-terminated
+  // string into oprofile.
+  DenseMap<MDNode*, std::string> Filenames;
 
  public:
   const char *getFilename(MDNode *Scope) {
-    char *&Filename = Filenames[Scope];
+    std::string &Filename = Filenames[Scope];
     if (Filename == NULL) {
       DIScope S(Scope);
-      Filename = strdup(S.getFilename());
-    }
-    return Filename;
-  }
-  ~FilenameCache() {
-    for (DenseMap<MDNode*, char*>::iterator
-             I = Filenames.begin(), E = Filenames.end(); I != E; ++I) {
-      free(I->second);
+      Filename = S.getFilename();
     }
+    return Filename.c_str();
   }
 };