kadircet created this revision. kadircet added a reviewer: sammccall. Herald added a subscriber: arphaman. Herald added a project: All. kadircet requested review of this revision. Herald added subscribers: cfe-commits, ilya-biryukov. Herald added projects: clang, clang-tools-extra.
This handles the new CLDXC options that was introduced in https://reviews.llvm.org/D128462 inside clang-tooling to make sure cl driver mode is not broken. Fixes https://github.com/clangd/clangd/issues/1292. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D133962 Files: clang-tools-extra/clangd/CompileCommands.cpp clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp clang/lib/Tooling/InterpolatingCompilationDatabase.cpp Index: clang/lib/Tooling/InterpolatingCompilationDatabase.cpp =================================================================== --- clang/lib/Tooling/InterpolatingCompilationDatabase.cpp +++ clang/lib/Tooling/InterpolatingCompilationDatabase.cpp @@ -165,8 +165,8 @@ const unsigned OldPos = Pos; std::unique_ptr<llvm::opt::Arg> Arg(OptTable.ParseOneArg( ArgList, Pos, - /* Include */ ClangCLMode ? CoreOption | CLOption : 0, - /* Exclude */ ClangCLMode ? 0 : CLOption)); + /* Include */ ClangCLMode ? CoreOption | CLOption | CLDXCOption : 0, + /* Exclude */ ClangCLMode ? 0 : CLOption | CLDXCOption)); if (!Arg) continue; Index: clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp +++ clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp @@ -415,6 +415,19 @@ // Make sure we don't crash. Mangler.adjust(Args, "foo.cc"); } + +TEST(CommandMangler, PathsAsPositional) { + const auto Mangler = CommandMangler::forTests(); + std::vector<std::string> Args = { + "clang", + "--driver-mode=cl", + "-I", + "foo", + }; + // Make sure we don't crash. + Mangler.adjust(Args, "a.cc"); + EXPECT_THAT(Args, Contains("foo")); +} } // namespace } // namespace clangd } // namespace clang Index: clang-tools-extra/clangd/CompileCommands.cpp =================================================================== --- clang-tools-extra/clangd/CompileCommands.cpp +++ clang-tools-extra/clangd/CompileCommands.cpp @@ -220,10 +220,13 @@ ArgList = OptTable.ParseArgs( llvm::makeArrayRef(OriginalArgs).drop_front(), IgnoredCount, IgnoredCount, /*FlagsToInclude=*/ - IsCLMode ? (driver::options::CLOption | driver::options::CoreOption) + IsCLMode ? (driver::options::CLOption | driver::options::CoreOption | + driver::options::CLDXCOption) : /*everything*/ 0, /*FlagsToExclude=*/driver::options::NoDriverOption | - (IsCLMode ? 0 : driver::options::CLOption)); + (IsCLMode + ? 0 + : (driver::options::CLOption | driver::options::CLDXCOption))); llvm::SmallVector<unsigned, 1> IndicesToDrop; // Having multiple architecture options (e.g. when building fat binaries)
Index: clang/lib/Tooling/InterpolatingCompilationDatabase.cpp =================================================================== --- clang/lib/Tooling/InterpolatingCompilationDatabase.cpp +++ clang/lib/Tooling/InterpolatingCompilationDatabase.cpp @@ -165,8 +165,8 @@ const unsigned OldPos = Pos; std::unique_ptr<llvm::opt::Arg> Arg(OptTable.ParseOneArg( ArgList, Pos, - /* Include */ ClangCLMode ? CoreOption | CLOption : 0, - /* Exclude */ ClangCLMode ? 0 : CLOption)); + /* Include */ ClangCLMode ? CoreOption | CLOption | CLDXCOption : 0, + /* Exclude */ ClangCLMode ? 0 : CLOption | CLDXCOption)); if (!Arg) continue; Index: clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp +++ clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp @@ -415,6 +415,19 @@ // Make sure we don't crash. Mangler.adjust(Args, "foo.cc"); } + +TEST(CommandMangler, PathsAsPositional) { + const auto Mangler = CommandMangler::forTests(); + std::vector<std::string> Args = { + "clang", + "--driver-mode=cl", + "-I", + "foo", + }; + // Make sure we don't crash. + Mangler.adjust(Args, "a.cc"); + EXPECT_THAT(Args, Contains("foo")); +} } // namespace } // namespace clangd } // namespace clang Index: clang-tools-extra/clangd/CompileCommands.cpp =================================================================== --- clang-tools-extra/clangd/CompileCommands.cpp +++ clang-tools-extra/clangd/CompileCommands.cpp @@ -220,10 +220,13 @@ ArgList = OptTable.ParseArgs( llvm::makeArrayRef(OriginalArgs).drop_front(), IgnoredCount, IgnoredCount, /*FlagsToInclude=*/ - IsCLMode ? (driver::options::CLOption | driver::options::CoreOption) + IsCLMode ? (driver::options::CLOption | driver::options::CoreOption | + driver::options::CLDXCOption) : /*everything*/ 0, /*FlagsToExclude=*/driver::options::NoDriverOption | - (IsCLMode ? 0 : driver::options::CLOption)); + (IsCLMode + ? 0 + : (driver::options::CLOption | driver::options::CLDXCOption))); llvm::SmallVector<unsigned, 1> IndicesToDrop; // Having multiple architecture options (e.g. when building fat binaries)
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits