[PATCH] D46783: FileSpec objects that resolve to "." should have "." in m_filename and m_directory empty.

Greg Clayton via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu May 17 10:13:40 PDT 2018


clayborg updated this revision to Diff 147345.
clayborg added a comment.

Updated to what was committed.


https://reviews.llvm.org/D46783

Files:
  source/Utility/FileSpec.cpp
  unittests/Utility/FileSpecTest.cpp


Index: unittests/Utility/FileSpecTest.cpp
===================================================================
--- unittests/Utility/FileSpecTest.cpp
+++ unittests/Utility/FileSpecTest.cpp
@@ -199,9 +199,10 @@
       {"/..", "/"},
       {"/.", "/"},
       {"..", ".."},
-      {".", ""},
+      {".", "."},
+      {"", "."},
       {"../..", "../.."},
-      {"foo/..", ""},
+      {"foo/..", "."},
       {"foo/../bar", "bar"},
       {"../foo/..", ".."},
       {"./foo", "foo"},
@@ -230,17 +231,18 @@
       {R"(\..)", R"(\..)"},
       //      {R"(c:..)", R"(c:..)"},
       {R"(..)", R"(..)"},
-      {R"(.)", R"()"},
+      {R"(.)", R"(.)"},
       // TODO: fix llvm::sys::path::remove_dots() to return "c:\" below.
       {R"(c:..\..)", R"(c:\..\..)"},
       {R"(..\..)", R"(..\..)"},
-      {R"(foo\..)", R"()"},
+      {R"(foo\..)", R"(.)"},
       {R"(foo\..\bar)", R"(bar)"},
       {R"(..\foo\..)", R"(..)"},
       {R"(.\foo)", R"(foo)"},
       {R"(.\.\foo)", R"(foo)"},
       {R"(..\foo)", R"(..\foo)"},
       {R"(..\..\foo)", R"(..\..\foo)"},
+      {"", "."},
   };
   for (auto test : windows_tests) {
     EXPECT_EQ(test.second,
Index: source/Utility/FileSpec.cpp
===================================================================
--- source/Utility/FileSpec.cpp
+++ source/Utility/FileSpec.cpp
@@ -258,6 +258,14 @@
   if (m_style == Style::windows)
     std::replace(resolved.begin(), resolved.end(), '\\', '/');
 
+  if (resolved.empty()) {
+    // If we have no path after normalization set the path to the current
+    // directory. This matches what python does and also a few other path
+    // utilities. 
+    m_filename.SetString(".");
+    return;
+  }
+
   m_filename.SetString(llvm::sys::path::filename(resolved, m_style));
   llvm::StringRef dir = llvm::sys::path::parent_path(resolved, m_style);
   if (!dir.empty())


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D46783.147345.patch
Type: text/x-patch
Size: 1855 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180517/54037f29/attachment.bin>


More information about the llvm-commits mailing list