forked from OSchip/llvm-project
ClangTool: strip -o from the command line
Summary: This patch creates a new ArgumentsAdjuster, which removes all -o parameters from the command line. This adjuster is inserted by default into the ClangTool pipeline. Reviewers: klimek CC: cfe-commits, revane Differential Revision: http://llvm-reviews.chandlerc.com/D925 llvm-svn: 183398
This commit is contained in:
parent
de229235b9
commit
dee20c105b
|
@ -52,6 +52,12 @@ class ClangSyntaxOnlyAdjuster : public ArgumentsAdjuster {
|
|||
virtual CommandLineArguments Adjust(const CommandLineArguments &Args);
|
||||
};
|
||||
|
||||
/// \brief An argument adjuster which removes output-related command line
|
||||
/// arguments.
|
||||
class ClangStripOutputAdjuster : public ArgumentsAdjuster {
|
||||
virtual CommandLineArguments Adjust(const CommandLineArguments &Args);
|
||||
};
|
||||
|
||||
} // end namespace tooling
|
||||
} // end namespace clang
|
||||
|
||||
|
|
|
@ -233,7 +233,7 @@ class ClangTool {
|
|||
// Contains a list of pairs (<file name>, <file content>).
|
||||
std::vector< std::pair<StringRef, StringRef> > MappedFileContents;
|
||||
|
||||
SmallVector<ArgumentsAdjuster *, 1> ArgsAdjusters;
|
||||
SmallVector<ArgumentsAdjuster *, 2> ArgsAdjusters;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
|
|
|
@ -37,6 +37,23 @@ ClangSyntaxOnlyAdjuster::Adjust(const CommandLineArguments &Args) {
|
|||
return AdjustedArgs;
|
||||
}
|
||||
|
||||
CommandLineArguments
|
||||
ClangStripOutputAdjuster::Adjust(const CommandLineArguments &Args) {
|
||||
CommandLineArguments AdjustedArgs;
|
||||
for (size_t i = 0, e = Args.size(); i < e; ++i) {
|
||||
StringRef Arg = Args[i];
|
||||
if(!Arg.startswith("-o"))
|
||||
AdjustedArgs.push_back(Args[i]);
|
||||
|
||||
if(Arg == "-o") {
|
||||
// Output is specified as -o foo. Skip the next argument also.
|
||||
++i;
|
||||
}
|
||||
// Else, the output is specified as -ofoo. Just do nothing.
|
||||
}
|
||||
return AdjustedArgs;
|
||||
}
|
||||
|
||||
} // end namespace tooling
|
||||
} // end namespace clang
|
||||
|
||||
|
|
|
@ -236,8 +236,9 @@ void ToolInvocation::addFileMappingsTo(SourceManager &Sources) {
|
|||
|
||||
ClangTool::ClangTool(const CompilationDatabase &Compilations,
|
||||
ArrayRef<std::string> SourcePaths)
|
||||
: Files((FileSystemOptions())),
|
||||
ArgsAdjusters(1, new ClangSyntaxOnlyAdjuster()) {
|
||||
: Files((FileSystemOptions())) {
|
||||
ArgsAdjusters.push_back(new ClangStripOutputAdjuster());
|
||||
ArgsAdjusters.push_back(new ClangSyntaxOnlyAdjuster());
|
||||
for (unsigned I = 0, E = SourcePaths.size(); I != E; ++I) {
|
||||
SmallString<1024> File(getAbsolutePath(SourcePaths[I]));
|
||||
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
// RUN: rm -rf %t
|
||||
// RUN: mkdir %t
|
||||
// RUN: echo '[{"directory":".","command":"clang++ -c %t/test.cpp -o foo -ofoo","file":"%t/test.cpp"}]' | sed -e 's/\\/\//g' > %t/compile_commands.json
|
||||
// RUN: cp "%s" "%t/test.cpp"
|
||||
// RUN: clang-check -p "%t" "%t/test.cpp" -extra-arg=-v 2>&1|FileCheck %s
|
||||
// FIXME: Make the above easier.
|
||||
|
||||
// CHECK: Invocation
|
||||
// CHECK-NOT: {{ -v}}
|
||||
// CHECK: C++ requires
|
||||
invalid;
|
Loading…
Reference in New Issue