mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
Use std::string instead of strdup() and free() in WinCodeViewLineTables
llvm-svn: 254557
This commit is contained in:
parent
c0e7cab0ab
commit
2dbef3216c
@ -27,15 +27,15 @@ StringRef WinCodeViewLineTables::getFullFilepath(const MDNode *S) {
|
||||
auto *Scope = cast<DIScope>(S);
|
||||
StringRef Dir = Scope->getDirectory(),
|
||||
Filename = Scope->getFilename();
|
||||
char *&Result = DirAndFilenameToFilepathMap[std::make_pair(Dir, Filename)];
|
||||
if (Result)
|
||||
return Result;
|
||||
std::string &Filepath =
|
||||
DirAndFilenameToFilepathMap[std::make_pair(Dir, Filename)];
|
||||
if (!Filepath.empty())
|
||||
return Filepath;
|
||||
|
||||
// Clang emits directory and relative filename info into the IR, but CodeView
|
||||
// operates on full paths. We could change Clang to emit full paths too, but
|
||||
// that would increase the IR size and probably not needed for other users.
|
||||
// For now, just concatenate and canonicalize the path here.
|
||||
std::string Filepath;
|
||||
if (Filename.find(':') == 1)
|
||||
Filepath = Filename;
|
||||
else
|
||||
@ -74,8 +74,7 @@ StringRef WinCodeViewLineTables::getFullFilepath(const MDNode *S) {
|
||||
while ((Cursor = Filepath.find("\\\\", Cursor)) != std::string::npos)
|
||||
Filepath.erase(Cursor, 1);
|
||||
|
||||
Result = strdup(Filepath.c_str());
|
||||
return StringRef(Result);
|
||||
return Filepath;
|
||||
}
|
||||
|
||||
void WinCodeViewLineTables::maybeRecordLocation(DebugLoc DL,
|
||||
|
@ -98,7 +98,7 @@ class LLVM_LIBRARY_VISIBILITY WinCodeViewLineTables : public AsmPrinterHandler {
|
||||
}
|
||||
} FileNameRegistry;
|
||||
|
||||
typedef std::map<std::pair<StringRef, StringRef>, char *>
|
||||
typedef std::map<std::pair<StringRef, StringRef>, std::string>
|
||||
DirAndFilenameToFilepathMapTy;
|
||||
DirAndFilenameToFilepathMapTy DirAndFilenameToFilepathMap;
|
||||
StringRef getFullFilepath(const MDNode *S);
|
||||
@ -116,14 +116,6 @@ class LLVM_LIBRARY_VISIBILITY WinCodeViewLineTables : public AsmPrinterHandler {
|
||||
public:
|
||||
WinCodeViewLineTables(AsmPrinter *Asm);
|
||||
|
||||
~WinCodeViewLineTables() override {
|
||||
for (DirAndFilenameToFilepathMapTy::iterator
|
||||
I = DirAndFilenameToFilepathMap.begin(),
|
||||
E = DirAndFilenameToFilepathMap.end();
|
||||
I != E; ++I)
|
||||
free(I->second);
|
||||
}
|
||||
|
||||
void setSymbolSize(const llvm::MCSymbol *, uint64_t) override {}
|
||||
|
||||
/// \brief Emit the COFF section that holds the line table information.
|
||||
|
Loading…
Reference in New Issue
Block a user