summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Support/Path.cpp4
-rw-r--r--llvm/unittests/Support/Path.cpp5
2 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Support/Path.cpp b/llvm/lib/Support/Path.cpp
index ff41dd47c42..dfe9f470bab 100644
--- a/llvm/lib/Support/Path.cpp
+++ b/llvm/lib/Support/Path.cpp
@@ -726,6 +726,10 @@ static SmallString<256> remove_dots(StringRef path, bool remove_dot_dot,
SmallString<256> buffer = path::root_path(path, style);
for (StringRef C : components)
path::append(buffer, style, C);
+ // If the buffer is empty, then return ".". Many other path utilities
+ // do this so it seems to be an expected result.
+ if (buffer.empty())
+ buffer.append(1, '.');
return buffer;
}
diff --git a/llvm/unittests/Support/Path.cpp b/llvm/unittests/Support/Path.cpp
index e91f760f99f..1efa7715cac 100644
--- a/llvm/unittests/Support/Path.cpp
+++ b/llvm/unittests/Support/Path.cpp
@@ -1146,7 +1146,7 @@ static std::string remove_dots(StringRef path, bool remove_dot_dot,
TEST(Support, RemoveDots) {
EXPECT_EQ("foolz\\wat",
remove_dots(".\\.\\\\foolz\\wat", false, path::Style::windows));
- EXPECT_EQ("", remove_dots(".\\\\\\\\\\", false, path::Style::windows));
+ EXPECT_EQ(".", remove_dots(".\\\\\\\\\\", false, path::Style::windows));
EXPECT_EQ("a\\..\\b\\c",
remove_dots(".\\a\\..\\b\\c", false, path::Style::windows));
@@ -1163,7 +1163,8 @@ TEST(Support, RemoveDots) {
EXPECT_EQ("foolz/wat",
remove_dots("././/foolz/wat", false, path::Style::posix));
- EXPECT_EQ("", remove_dots("./////", false, path::Style::posix));
+ EXPECT_EQ(".", remove_dots("./////", false, path::Style::posix));
+ EXPECT_EQ(".", remove_dots("", false, path::Style::posix));
EXPECT_EQ("a/../b/c", remove_dots("./a/../b/c", false, path::Style::posix));
EXPECT_EQ("b/c", remove_dots("./a/../b/c", true, path::Style::posix));
OpenPOWER on IntegriCloud