From: Kadir Cetinkaya Date: Wed, 24 Apr 2019 08:45:03 +0000 (+0000) Subject: [clang][HeaderSearch] Make sure there are no backslashes in suggestedPath X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cb27266d3b1a362acd736ee802ebed8a166e2175;p=clang [clang][HeaderSearch] Make sure there are no backslashes in suggestedPath Reviewers: sammccall Differential Revision: https://reviews.llvm.org/D60995 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@359075 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Lex/HeaderSearch.h b/include/clang/Lex/HeaderSearch.h index 879d24d0c6..7488d9e0e3 100644 --- a/include/clang/Lex/HeaderSearch.h +++ b/include/clang/Lex/HeaderSearch.h @@ -706,16 +706,18 @@ public: /// Retrieve a uniqued framework name. StringRef getUniqueFrameworkName(StringRef Framework); - /// Suggest a path by which the specified file could be found, for - /// use in diagnostics to suggest a #include. + /// Suggest a path by which the specified file could be found, for use in + /// diagnostics to suggest a #include. Returned path will only contain forward + /// slashes as separators. /// /// \param IsSystem If non-null, filled in to indicate whether the suggested /// path is relative to a system header directory. std::string suggestPathToFileForDiagnostics(const FileEntry *File, bool *IsSystem = nullptr); - /// Suggest a path by which the specified file could be found, for - /// use in diagnostics to suggest a #include. + /// Suggest a path by which the specified file could be found, for use in + /// diagnostics to suggest a #include. Returned path will only contain forward + /// slashes as separators. /// /// \param WorkingDir If non-empty, this will be prepended to search directory /// paths that are relative. diff --git a/lib/Lex/HeaderSearch.cpp b/lib/Lex/HeaderSearch.cpp index e0ffb8758c..a26df9a7f6 100644 --- a/lib/Lex/HeaderSearch.cpp +++ b/lib/Lex/HeaderSearch.cpp @@ -1720,5 +1720,5 @@ std::string HeaderSearch::suggestPathToFileForDiagnostics( if (IsSystem) *IsSystem = BestPrefixLength ? BestSearchDir >= SystemDirIdx : false; - return File.drop_front(BestPrefixLength); + return path::convert_to_slash(File.drop_front(BestPrefixLength)); } diff --git a/unittests/Lex/HeaderSearchTest.cpp b/unittests/Lex/HeaderSearchTest.cpp index 6365d3ed05..b5b0f9a833 100644 --- a/unittests/Lex/HeaderSearchTest.cpp +++ b/unittests/Lex/HeaderSearchTest.cpp @@ -91,5 +91,14 @@ TEST_F(HeaderSearchTest, Dots) { "z"); } +#ifdef _WIN32 +TEST_F(HeaderSearchTest, BackSlash) { + addSearchDir("C:\\x\\y\\"); + EXPECT_EQ(Search.suggestPathToFileForDiagnostics("C:\\x\\y\\z\\t", + /*WorkingDir=*/""), + "z/t"); +} +#endif + } // namespace } // namespace clang