summaryrefslogtreecommitdiffstats
path: root/tools/clang-check/ClangCheck.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/clang-check/ClangCheck.cpp')
-rw-r--r--tools/clang-check/ClangCheck.cpp74
1 files changed, 11 insertions, 63 deletions
diff --git a/tools/clang-check/ClangCheck.cpp b/tools/clang-check/ClangCheck.cpp
index cc8d43c..7992026 100644
--- a/tools/clang-check/ClangCheck.cpp
+++ b/tools/clang-check/ClangCheck.cpp
@@ -25,6 +25,7 @@
#include "clang/StaticAnalyzer/Frontend/FrontendActions.h"
#include "clang/Tooling/CommonOptionsParser.h"
#include "clang/Tooling/Tooling.h"
+#include "llvm/ADT/STLExtras.h"
#include "llvm/Option/OptTable.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/Signals.h"
@@ -77,15 +78,6 @@ static cl::opt<bool> FixWhatYouCan(
cl::desc(Options->getOptionHelpText(options::OPT_fix_what_you_can)),
cl::cat(ClangCheckCategory));
-static cl::list<std::string> ArgsAfter(
- "extra-arg",
- cl::desc("Additional argument to append to the compiler command line"),
- cl::cat(ClangCheckCategory));
-static cl::list<std::string> ArgsBefore(
- "extra-arg-before",
- cl::desc("Additional argument to prepend to the compiler command line"),
- cl::cat(ClangCheckCategory));
-
namespace {
// FIXME: Move FixItRewriteInPlace from lib/Rewrite/Frontend/FrontendActions.cpp
@@ -139,57 +131,21 @@ public:
}
};
-class InsertAdjuster: public clang::tooling::ArgumentsAdjuster {
-public:
- enum Position { BEGIN, END };
-
- InsertAdjuster(const CommandLineArguments &Extra, Position Pos)
- : Extra(Extra), Pos(Pos) {
- }
-
- InsertAdjuster(const char *Extra, Position Pos)
- : Extra(1, std::string(Extra)), Pos(Pos) {
- }
-
- virtual CommandLineArguments
- Adjust(const CommandLineArguments &Args) 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.
-// "Non-global symbol: ... can't be a weak_definition"
-namespace clang_check {
class ClangCheckActionFactory {
public:
- clang::ASTConsumer *newASTConsumer() {
+ std::unique_ptr<clang::ASTConsumer> newASTConsumer() {
if (ASTList)
return clang::CreateASTDeclNodeLister();
if (ASTDump)
- return clang::CreateASTDumper(ASTDumpFilter);
+ return clang::CreateASTDumper(ASTDumpFilter, /*DumpDecls=*/true,
+ /*DumpLookups=*/false);
if (ASTPrint)
return clang::CreateASTPrinter(&llvm::outs(), ASTDumpFilter);
- return new clang::ASTConsumer();
+ return llvm::make_unique<clang::ASTConsumer>();
}
};
-}
+
+} // namespace
int main(int argc, const char **argv) {
llvm::sys::PrintStackTraceOnErrorSignal();
@@ -199,22 +155,14 @@ int main(int argc, const char **argv) {
// Clear adjusters because -fsyntax-only is inserted by the default chain.
Tool.clearArgumentsAdjusters();
- Tool.appendArgumentsAdjuster(new ClangStripOutputAdjuster());
- if (ArgsAfter.size() > 0) {
- Tool.appendArgumentsAdjuster(new InsertAdjuster(ArgsAfter,
- InsertAdjuster::END));
- }
- if (ArgsBefore.size() > 0) {
- Tool.appendArgumentsAdjuster(new InsertAdjuster(ArgsBefore,
- InsertAdjuster::BEGIN));
- }
+ Tool.appendArgumentsAdjuster(getClangStripOutputAdjuster());
// Running the analyzer requires --analyze. Other modes can work with the
// -fsyntax-only option.
- Tool.appendArgumentsAdjuster(new InsertAdjuster(
- Analyze ? "--analyze" : "-fsyntax-only", InsertAdjuster::BEGIN));
+ Tool.appendArgumentsAdjuster(getInsertArgumentAdjuster(
+ Analyze ? "--analyze" : "-fsyntax-only", ArgumentInsertPosition::BEGIN));
- clang_check::ClangCheckActionFactory CheckFactory;
+ ClangCheckActionFactory CheckFactory;
std::unique_ptr<FrontendActionFactory> FrontendFactory;
// Choose the correct factory based on the selected mode.
OpenPOWER on IntegriCloud