summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-move
diff options
context:
space:
mode:
authorEric Liu <ioeric@google.com>2018-05-16 20:10:10 +0000
committerEric Liu <ioeric@google.com>2018-05-16 20:10:10 +0000
commitad3fed62a9f59f92705d7dc5cd077fd3d72bd87c (patch)
treec31ab085c9c5ec4b5df011302203a5d997d47fd6 /clang-tools-extra/clang-move
parent6ccb59b3e957b61f8d8f717a591a12b9b8ea70ef (diff)
downloadbcm5719-llvm-ad3fed62a9f59f92705d7dc5cd077fd3d72bd87c.tar.gz
bcm5719-llvm-ad3fed62a9f59f92705d7dc5cd077fd3d72bd87c.zip
[clang-move] Fix a potential bug where realpath doesn't work on VFS.
llvm-svn: 332518
Diffstat (limited to 'clang-tools-extra/clang-move')
-rw-r--r--clang-tools-extra/clang-move/ClangMove.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/clang-tools-extra/clang-move/ClangMove.cpp b/clang-tools-extra/clang-move/ClangMove.cpp
index 16b0f723509..7626d1ccedf 100644
--- a/clang-tools-extra/clang-move/ClangMove.cpp
+++ b/clang-tools-extra/clang-move/ClangMove.cpp
@@ -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();
}
OpenPOWER on IntegriCloud