forked from OSchip/llvm-project
[clang(d)] Include/Exclude CLDXC options properly
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. Differential Revision: https://reviews.llvm.org/D133962
This commit is contained in:
parent
1d1a98e9a0
commit
23ace26e0d
|
@ -220,10 +220,13 @@ void CommandMangler::adjust(std::vector<std::string> &Cmd,
|
|||
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)
|
||||
|
|
|
@ -415,6 +415,19 @@ TEST(CommandMangler, EmptyArgs) {
|
|||
// 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
|
||||
|
|
|
@ -165,8 +165,8 @@ struct TransferableCommand {
|
|||
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;
|
||||
|
|
Loading…
Reference in New Issue