[clang-move] Fix a potential bug where realpath doesn't work on VFS.

llvm-svn: 332518
This commit is contained in:
Eric Liu 2018-05-16 20:10:10 +00:00
parent 6ccb59b3e9
commit ad3fed62a9
1 changed files with 9 additions and 5 deletions

View File

@ -95,12 +95,16 @@ std::string MakeAbsolutePath(const SourceManager &SM, StringRef Path) {
llvm::sys::path::parent_path(AbsolutePath.str()));
if (Dir) {
StringRef DirName = SM.getFileManager().getCanonicalName(Dir);
SmallVector<char, 128> AbsoluteFilename;
llvm::sys::path::append(AbsoluteFilename, DirName,
llvm::sys::path::filename(AbsolutePath.str()));
return llvm::StringRef(AbsoluteFilename.data(), AbsoluteFilename.size())
.str();
// FIXME: getCanonicalName might fail to get real path on VFS.
if (llvm::sys::path::is_absolute(DirName)) {
SmallVector<char, 128> AbsoluteFilename;
llvm::sys::path::append(AbsoluteFilename, DirName,
llvm::sys::path::filename(AbsolutePath.str()));
return llvm::StringRef(AbsoluteFilename.data(), AbsoluteFilename.size())
.str();
}
}
llvm::sys::path::remove_dots(AbsolutePath, /*remove_dot_dot=*/true);
return AbsolutePath.str();
}