forked from OSchip/llvm-project
[Tooling] FixedCompilationDatabase should be able to strip positional
arguments when `-fsyntax-only` is used Previously, Clang failed to create a fixed compilation database when the compilation arguments use -fsyntax-only instead of -c. This commit fixes the issue by forcing Clang to look at the compilation job when stripping the positional arguments. Differential Revision: https://reviews.llvm.org/D34687 llvm-svn: 306659
This commit is contained in:
parent
4bcb9c3349
commit
e2863eca2a
|
@ -255,10 +255,12 @@ static bool stripPositionalArgs(std::vector<const char *> Args,
|
|||
CompileJobAnalyzer CompileAnalyzer;
|
||||
|
||||
for (const auto &Cmd : Jobs) {
|
||||
// Collect only for Assemble jobs. If we do all jobs we get duplicates
|
||||
// since Link jobs point to Assemble jobs as inputs.
|
||||
if (Cmd.getSource().getKind() == driver::Action::AssembleJobClass)
|
||||
// Collect only for Assemble and Compile jobs. If we do all jobs we get
|
||||
// duplicates since Link jobs point to Assemble jobs as inputs.
|
||||
if (Cmd.getSource().getKind() == driver::Action::AssembleJobClass ||
|
||||
Cmd.getSource().getKind() == driver::Action::CompileJobClass) {
|
||||
CompileAnalyzer.run(&Cmd.getSource());
|
||||
}
|
||||
}
|
||||
|
||||
if (CompileAnalyzer.Inputs.empty()) {
|
||||
|
|
|
@ -586,6 +586,27 @@ TEST(ParseFixedCompilationDatabase, HandlesPositionalArgs) {
|
|||
EXPECT_EQ(2, Argc);
|
||||
}
|
||||
|
||||
TEST(ParseFixedCompilationDatabase, HandlesPositionalArgsSyntaxOnly) {
|
||||
// Adjust the given command line arguments to ensure that any positional
|
||||
// arguments in them are stripped.
|
||||
const char *Argv[] = {"--", "somefile.cpp", "-fsyntax-only", "-DDEF3"};
|
||||
int Argc = llvm::array_lengthof(Argv);
|
||||
std::string ErrorMessage;
|
||||
std::unique_ptr<CompilationDatabase> Database =
|
||||
FixedCompilationDatabase::loadFromCommandLine(Argc, Argv, ErrorMessage);
|
||||
ASSERT_TRUE((bool)Database);
|
||||
ASSERT_TRUE(ErrorMessage.empty());
|
||||
std::vector<CompileCommand> Result = Database->getCompileCommands("source");
|
||||
ASSERT_EQ(1ul, Result.size());
|
||||
ASSERT_EQ(".", Result[0].Directory);
|
||||
std::vector<std::string> Expected;
|
||||
Expected.push_back("clang-tool");
|
||||
Expected.push_back("-fsyntax-only");
|
||||
Expected.push_back("-DDEF3");
|
||||
Expected.push_back("source");
|
||||
ASSERT_EQ(Expected, Result[0].CommandLine);
|
||||
}
|
||||
|
||||
TEST(ParseFixedCompilationDatabase, HandlesArgv0) {
|
||||
const char *Argv[] = {"1", "2", "--", "mytool", "somefile.cpp"};
|
||||
int Argc = sizeof(Argv) / sizeof(char*);
|
||||
|
|
Loading…
Reference in New Issue