diff options
author | Kadir Cetinkaya <kadircet@google.com> | 2019-04-24 08:45:03 +0000 |
---|---|---|
committer | Kadir Cetinkaya <kadircet@google.com> | 2019-04-24 08:45:03 +0000 |
commit | cb27266d3b1a362acd736ee802ebed8a166e2175 (patch) | |
tree | be4dc795fbe69e111b7e788f9c81bce83d1086c4 | |
parent | 418eae9689448e9a0cf7abcda8cca56f420b752f (diff) | |
download | clang-cb27266d3b1a362acd736ee802ebed8a166e2175.tar.gz |
[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
-rw-r--r-- | include/clang/Lex/HeaderSearch.h | 10 | ||||
-rw-r--r-- | lib/Lex/HeaderSearch.cpp | 2 | ||||
-rw-r--r-- | unittests/Lex/HeaderSearchTest.cpp | 9 |
3 files changed, 16 insertions, 5 deletions
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 |