Author: Adam Czachorowski Date: 2021-01-15T14:26:24+01:00 New Revision: c77c3d1d18cdd58989f9d35bbf6c31f5fda0a125
URL: https://github.com/llvm/llvm-project/commit/c77c3d1d18cdd58989f9d35bbf6c31f5fda0a125 DIFF: https://github.com/llvm/llvm-project/commit/c77c3d1d18cdd58989f9d35bbf6c31f5fda0a125.diff LOG: [clangd] Set correct CWD when using compile_flags.txt This fixes a bug where clangd would attempt to set CWD to the compile_flags.txt file itself. Differential Revision: https://reviews.llvm.org/D94699 Added: Modified: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp b/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp index d983f76e227f..fde4e56ac72d 100644 --- a/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp +++ b/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp @@ -271,7 +271,8 @@ parseJSON(PathRef Path, llvm::StringRef Data, std::string &Error) { } static std::unique_ptr<tooling::CompilationDatabase> parseFixed(PathRef Path, llvm::StringRef Data, std::string &Error) { - return tooling::FixedCompilationDatabase::loadFromBuffer(Path, Data, Error); + return tooling::FixedCompilationDatabase::loadFromBuffer( + llvm::sys::path::parent_path(Path), Data, Error); } bool DirectoryBasedGlobalCompilationDatabase::DirectoryCache::load( diff --git a/clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp b/clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp index 63b1b731656a..fbb85684af5f 100644 --- a/clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp +++ b/clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp @@ -279,6 +279,17 @@ TEST(GlobalCompilationDatabaseTest, BuildDir) { << "x/build/compile_flags.json only applicable to x/"; } +TEST(GlobalCompilationDatabaseTest, CompileFlagsDirectory) { + MockFS FS; + FS.Files[testPath("x/compile_flags.txt")] = "-DFOO"; + DirectoryBasedGlobalCompilationDatabase CDB(FS); + auto Commands = CDB.getCompileCommand(testPath("x/y.cpp")); + ASSERT_TRUE(Commands.hasValue()); + EXPECT_THAT(Commands.getValue().CommandLine, Contains("-DFOO")); + // Make sure we pick the right working directory. + EXPECT_EQ(testPath("x"), Commands.getValue().Directory); +} + TEST(GlobalCompilationDatabaseTest, NonCanonicalFilenames) { OverlayCDB DB(nullptr); std::vector<std::string> DiscoveredFiles; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits