summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2013-06-05 16:23:30 +0000
committerPavel Labath <labath@google.com>2013-06-05 16:23:30 +0000
commit951ad647a0e2e16a3678775c1a2db61bbd559c9e (patch)
tree9e8311d288749dcef27e1728051ee4133073ea72
parent2773f1deb4639c484fd66276442e61259583c1b2 (diff)
downloadbcm5719-llvm-951ad647a0e2e16a3678775c1a2db61bbd559c9e.tar.gz
bcm5719-llvm-951ad647a0e2e16a3678775c1a2db61bbd559c9e.zip
clang-check: Enable specification of additional compiler arguments
Summary: This adds two command-line parameters: -extra-arg and -extra-arg-before, which enable the user to pass additional parameters to the compiler command. Reviewers: klimek CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D919 llvm-svn: 183320
-rw-r--r--clang/test/Tooling/clang-check-extra-arg.cpp5
-rw-r--r--clang/tools/clang-check/ClangCheck.cpp40
2 files changed, 45 insertions, 0 deletions
diff --git a/clang/test/Tooling/clang-check-extra-arg.cpp b/clang/test/Tooling/clang-check-extra-arg.cpp
new file mode 100644
index 00000000000..f6715358453
--- /dev/null
+++ b/clang/test/Tooling/clang-check-extra-arg.cpp
@@ -0,0 +1,5 @@
+// RUN: clang-check "%s" -extra-arg=-Wunimplemented-warning -extra-arg-before=-Wunimplemented-warning-before -- -c 2>&1 | FileCheck %s
+
+// CHECK: unknown warning option '-Wunimplemented-warning-before'
+// CHECK: unknown warning option '-Wunimplemented-warning'
+int a(){}
diff --git a/clang/tools/clang-check/ClangCheck.cpp b/clang/tools/clang-check/ClangCheck.cpp
index bf4337486ad..05783620ca3 100644
--- a/clang/tools/clang-check/ClangCheck.cpp
+++ b/clang/tools/clang-check/ClangCheck.cpp
@@ -70,6 +70,11 @@ static cl::opt<bool> FixWhatYouCan(
"fix-what-you-can",
cl::desc(Options->getOptionHelpText(options::OPT_fix_what_you_can)));
+static cl::list<std::string> ArgsAfter("extra-arg",
+ cl::desc("Additional argument to append to the compiler command line"));
+static cl::list<std::string> ArgsBefore("extra-arg-before",
+ cl::desc("Additional argument to prepend to the compiler command line"));
+
namespace {
// FIXME: Move FixItRewriteInPlace from lib/Rewrite/Frontend/FrontendActions.cpp
@@ -123,6 +128,35 @@ public:
}
};
+class InsertAdjuster: public clang::tooling::ArgumentsAdjuster {
+public:
+ enum Position { BEGIN, END };
+
+ InsertAdjuster(const CommandLineArguments &Extra, Position Pos)
+ : Extra(Extra), Pos(Pos) {
+ }
+
+ virtual CommandLineArguments
+ Adjust(const CommandLineArguments &Args) LLVM_OVERRIDE {
+ CommandLineArguments Return(Args);
+
+ CommandLineArguments::iterator I;
+ if (Pos == END) {
+ I = Return.end();
+ } else {
+ I = Return.begin();
+ ++I; // To leave the program name in place
+ }
+
+ Return.insert(I, Extra.begin(), Extra.end());
+ return Return;
+ }
+
+private:
+ const CommandLineArguments Extra;
+ const Position Pos;
+};
+
} // namespace
// Anonymous namespace here causes problems with gcc <= 4.4 on MacOS 10.6.
@@ -147,6 +181,12 @@ int main(int argc, const char **argv) {
CommonOptionsParser OptionsParser(argc, argv);
ClangTool Tool(OptionsParser.getCompilations(),
OptionsParser.getSourcePathList());
+
+ if (ArgsAfter.size() > 0)
+ Tool.appendArgumentsAdjuster(new InsertAdjuster(ArgsAfter, InsertAdjuster::END));
+ if (ArgsBefore.size() > 0)
+ Tool.appendArgumentsAdjuster(new InsertAdjuster(ArgsBefore, InsertAdjuster::BEGIN));
+
if (Fixit)
return Tool.run(newFrontendActionFactory<FixItAction>());
clang_check::ClangCheckActionFactory Factory;
OpenPOWER on IntegriCloud