adamcz created this revision. Herald added subscribers: usaxena95, kadircet, arphaman. adamcz requested review of this revision. Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov. Herald added a project: clang.
This fixes a bug where clangd would attempt to set CWD to the compile_flags.txt file itself. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D94699 Files: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp Index: clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp +++ clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp @@ -279,6 +279,17 @@ << "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; Index: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp =================================================================== --- clang-tools-extra/clangd/GlobalCompilationDatabase.cpp +++ clang-tools-extra/clangd/GlobalCompilationDatabase.cpp @@ -271,7 +271,8 @@ } 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(
Index: clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp +++ clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp @@ -279,6 +279,17 @@ << "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; Index: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp =================================================================== --- clang-tools-extra/clangd/GlobalCompilationDatabase.cpp +++ clang-tools-extra/clangd/GlobalCompilationDatabase.cpp @@ -271,7 +271,8 @@ } 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(
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits