[clang][HeaderSearch] Consider all path separators equal
authorKadir Cetinkaya <kadircet@google.com>
Thu, 6 Jun 2019 18:49:16 +0000 (18:49 +0000)
committerKadir Cetinkaya <kadircet@google.com>
Thu, 6 Jun 2019 18:49:16 +0000 (18:49 +0000)
Reviewers: ilya-biryukov, sammccall

Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D62965

llvm-svn: 362731

clang/lib/Lex/HeaderSearch.cpp
clang/unittests/Lex/HeaderSearchTest.cpp

index 16a53bf..3ad0e1e 100644 (file)
@@ -1715,6 +1715,11 @@ std::string HeaderSearch::suggestPathToFileForDiagnostics(
         break;
       }
 
+      // Consider all path separators equal.
+      if (NI->size() == 1 && DI->size() == 1 &&
+          path::is_separator(NI->front()) && path::is_separator(DI->front()))
+        continue;
+
       if (*NI != *DI)
         break;
     }
index 5bcdd9e..499acec 100644 (file)
@@ -98,6 +98,13 @@ TEST_F(HeaderSearchTest, BackSlash) {
                                                    /*WorkingDir=*/""),
             "z/t");
 }
+
+TEST_F(HeaderSearchTest, BackSlashWithDotDot) {
+  addSearchDir("..\\y");
+  EXPECT_EQ(Search.suggestPathToFileForDiagnostics("C:\\x\\y\\z\\t",
+                                                   /*WorkingDir=*/"C:/x/y/"),
+            "z/t");
+}
 #endif
 
 TEST_F(HeaderSearchTest, DotDotsWithAbsPath) {