Fix the OProfileJITEventListener for StringRef being returned from debug info.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90813 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jeffrey Yasskin 2009-12-07 22:32:38 +00:00
parent c59b33562c
commit 13027640e8

View 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();
}
};