summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2019-08-06 15:46:45 +0000
committerJonas Devlieghere <jonas@devlieghere.com>2019-08-06 15:46:45 +0000
commitcb6f2646fd44c5274312c8fa782c4f339dfadad7 (patch)
treee3b80d3a426d7e65127df170b4c94f093ec812db
parent4b03364d72a5f4e372e631178bd32e0d4f531241 (diff)
downloadbcm5719-llvm-cb6f2646fd44c5274312c8fa782c4f339dfadad7.tar.gz
bcm5719-llvm-cb6f2646fd44c5274312c8fa782c4f339dfadad7.zip
[Path] Fix bug in make_absolute logic
This fixes a bug for making path with a //net style root absolute. I discovered the bug while writing a test case for the VFS, which uses these paths because they're both legal absolute paths on Windows and Unix. Differential revision: https://reviews.llvm.org/D65675 llvm-svn: 368053
-rw-r--r--llvm/lib/Support/Path.cpp6
-rw-r--r--llvm/unittests/Support/Path.cpp17
2 files changed, 16 insertions, 7 deletions
diff --git a/llvm/lib/Support/Path.cpp b/llvm/lib/Support/Path.cpp
index c49260125db..14def83802d 100644
--- a/llvm/lib/Support/Path.cpp
+++ b/llvm/lib/Support/Path.cpp
@@ -855,11 +855,11 @@ void make_absolute(const Twine &current_directory,
StringRef p(path.data(), path.size());
bool rootDirectory = path::has_root_directory(p);
- bool rootName =
- (real_style(Style::native) != Style::windows) || path::has_root_name(p);
+ bool rootName = path::has_root_name(p);
// Already absolute.
- if (rootName && rootDirectory)
+ if ((rootName || real_style(Style::native) != Style::windows) &&
+ rootDirectory)
return;
// All of the following conditions will need the current directory.
diff --git a/llvm/unittests/Support/Path.cpp b/llvm/unittests/Support/Path.cpp
index 5e0581c945b..1802b0031ad 100644
--- a/llvm/unittests/Support/Path.cpp
+++ b/llvm/unittests/Support/Path.cpp
@@ -185,10 +185,19 @@ TEST(Support, Path) {
path::native(*i, temp_store);
}
- SmallString<32> Relative("foo.cpp");
- sys::fs::make_absolute("/root", Relative);
- Relative[5] = '/'; // Fix up windows paths.
- ASSERT_EQ("/root/foo.cpp", Relative);
+ {
+ SmallString<32> Relative("foo.cpp");
+ sys::fs::make_absolute("/root", Relative);
+ Relative[5] = '/'; // Fix up windows paths.
+ ASSERT_EQ("/root/foo.cpp", Relative);
+ }
+
+ {
+ SmallString<32> Relative("foo.cpp");
+ sys::fs::make_absolute("//root", Relative);
+ Relative[6] = '/'; // Fix up windows paths.
+ ASSERT_EQ("//root/foo.cpp", Relative);
+ }
}
TEST(Support, FilenameParent) {
OpenPOWER on IntegriCloud