[cfe-commits] r160265 - in /cfe/trunk: include/clang/Tooling/CommandLineClangTool.h lib/Tooling/CMakeLists.txt lib/Tooling/CommandLineClangTool.cpp test/CMakeLists.txt test/Tooling/clang-ast-dump.cpp tools/CMakeLists.txt tools/Makefile tools/clang-ast-dump/ tools/clang-ast-dump/CMakeLists.txt tools/clang-ast-dump/ClangASTDump.cpp tools/clang-ast-dump/Makefile tools/clang-check/ClangCheck.cpp

Alexander Kornienko alexfh at google.com
Mon Jul 16 05:46:48 PDT 2012


Author: alexfh
Date: Mon Jul 16 07:46:48 2012
New Revision: 160265

URL: http://llvm.org/viewvc/llvm-project?rev=160265&view=rev
Log:
The new clang-ast-dump tool for selective AST dumping. Moved common command-line tool stuff to CommandLineClangTool

Added:
    cfe/trunk/include/clang/Tooling/CommandLineClangTool.h
    cfe/trunk/lib/Tooling/CommandLineClangTool.cpp
    cfe/trunk/test/Tooling/clang-ast-dump.cpp
    cfe/trunk/tools/clang-ast-dump/
    cfe/trunk/tools/clang-ast-dump/CMakeLists.txt
    cfe/trunk/tools/clang-ast-dump/ClangASTDump.cpp
    cfe/trunk/tools/clang-ast-dump/Makefile
Modified:
    cfe/trunk/lib/Tooling/CMakeLists.txt
    cfe/trunk/test/CMakeLists.txt
    cfe/trunk/tools/CMakeLists.txt
    cfe/trunk/tools/Makefile
    cfe/trunk/tools/clang-check/ClangCheck.cpp

Added: cfe/trunk/include/clang/Tooling/CommandLineClangTool.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/CommandLineClangTool.h?rev=160265&view=auto
==============================================================================
--- cfe/trunk/include/clang/Tooling/CommandLineClangTool.h (added)
+++ cfe/trunk/include/clang/Tooling/CommandLineClangTool.h Mon Jul 16 07:46:48 2012
@@ -0,0 +1,80 @@
+//===- CommandLineClangTool.h - command-line clang tools driver -*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file implements the CommandLineClangTool class used to run clang
+//  tools as separate command-line applications with a consistent common
+//  interface for handling compilation database and input files.
+//
+//  It provides a common subset of command-line options, common algorithm
+//  for locating a compilation database and source files, and help messages
+//  for the basic command-line interface.
+//
+//  It creates a CompilationDatabase, initializes a ClangTool and runs a
+//  user-specified FrontendAction over all TUs in which the given files are
+//  compiled.
+//
+//  This class uses the Clang Tooling infrastructure, see
+//    http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html
+//  for details on setting it up with LLVM source tree.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_CLANG_INCLUDE_CLANG_TOOLING_COMMANDLINECLANGTOOL_H
+#define LLVM_TOOLS_CLANG_INCLUDE_CLANG_TOOLING_COMMANDLINECLANGTOOL_H
+
+#include "llvm/Support/CommandLine.h"
+#include "clang/Tooling/CompilationDatabase.h"
+
+namespace clang {
+
+namespace tooling {
+
+class CompilationDatabase;
+class FrontendActionFactory;
+
+/// \brief A common driver for command-line Clang tools.
+///
+/// Parses a common subset of command-line arguments, locates and loads a
+/// compilation commands database, runs a tool with user-specified action. It
+/// also contains a help message for the common command-line options.
+/// An example of usage:
+/// @code
+/// int main(int argc, const char **argv) {
+///   CommandLineClangTool Tool;
+///   cl::extrahelp MoreHelp("\nMore help text...");
+///   Tool.initialize(argc, argv);
+///   return Tool.run(newFrontendActionFactory<clang::SyntaxOnlyAction>());
+/// }
+/// @endcode
+///
+class CommandLineClangTool {
+public:
+  /// Sets up command-line options and help messages.
+  /// Add your own help messages after constructing this tool.
+  CommandLineClangTool();
+
+  /// Parses command-line, initializes a compilation database.
+  /// This method exits program in case of error.
+  void initialize(int argc, const char **argv);
+
+  /// Runs a clang tool with an action created by \c ActionFactory.
+  int run(FrontendActionFactory *ActionFactory);
+
+private:
+  llvm::OwningPtr<CompilationDatabase> Compilations;
+  llvm::cl::opt<std::string> BuildPath;
+  llvm::cl::list<std::string> SourcePaths;
+  llvm::cl::extrahelp MoreHelp;
+};
+
+} // namespace tooling
+
+} // namespace clang
+
+#endif  // LLVM_TOOLS_CLANG_INCLUDE_CLANG_TOOLING_COMMANDLINECLANGTOOL_H

Modified: cfe/trunk/lib/Tooling/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CMakeLists.txt?rev=160265&r1=160264&r2=160265&view=diff
==============================================================================
--- cfe/trunk/lib/Tooling/CMakeLists.txt (original)
+++ cfe/trunk/lib/Tooling/CMakeLists.txt Mon Jul 16 07:46:48 2012
@@ -1,6 +1,7 @@
 set(LLVM_LINK_COMPONENTS support)
 
 add_clang_library(clangTooling
+  CommandLineClangTool.cpp
   CompilationDatabase.cpp
   Refactoring.cpp
   Tooling.cpp

Added: cfe/trunk/lib/Tooling/CommandLineClangTool.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CommandLineClangTool.cpp?rev=160265&view=auto
==============================================================================
--- cfe/trunk/lib/Tooling/CommandLineClangTool.cpp (added)
+++ cfe/trunk/lib/Tooling/CommandLineClangTool.cpp Mon Jul 16 07:46:48 2012
@@ -0,0 +1,80 @@
+//===--- CommandLineClangTool.cpp - command-line clang tools driver -------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file implements the CommandLineClangTool class used to run clang
+//  tools as separate command-line applications with a consistent common
+//  interface for handling compilation database and input files.
+//
+//  It provides a common subset of command-line options, common algorithm
+//  for locating a compilation database and source files, and help messages
+//  for the basic command-line interface.
+//
+//  It creates a CompilationDatabase, initializes a ClangTool and runs a
+//  user-specified FrontendAction over all TUs in which the given files are
+//  compiled.
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/Frontend/FrontendActions.h"
+#include "clang/Tooling/CommandLineClangTool.h"
+#include "clang/Tooling/Tooling.h"
+
+using namespace clang::tooling;
+using namespace llvm;
+
+static const char *MoreHelpText =
+    "\n"
+    "-p <build-path> is used to read a compile command database.\n"
+    "\n"
+    "\tFor example, it can be a CMake build directory in which a file named\n"
+    "\tcompile_commands.json exists (use -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n"
+    "\tCMake option to get this output). When no build path is specified,\n"
+    "\tclang-check will attempt to locate it automatically using all parent\n"
+    "\tpaths of the first input file. See:\n"
+    "\thttp://clang.llvm.org/docs/HowToSetupToolingForLLVM.html for an\n"
+    "\texample of setting up Clang Tooling on a source tree.\n"
+    "\n"
+    "<source0> ... specify the paths of source files. These paths are looked\n"
+    "\tup in the compile command database. If the path of a file is absolute,\n"
+    "\tit needs to point into CMake's source tree. If the path is relative,\n"
+    "\tthe current working directory needs to be in the CMake source tree and\n"
+    "\tthe file must be in a subdirectory of the current working directory.\n"
+    "\t\"./\" prefixes in the relative files will be automatically removed,\n"
+    "\tbut the rest of a relative path must be a suffix of a path in the\n"
+    "\tcompile command database.\n"
+    "\n";
+
+CommandLineClangTool::CommandLineClangTool() :
+    BuildPath("p", cl::desc("Build path"), cl::Optional),
+    SourcePaths(cl::Positional, cl::desc("<source0> [... <sourceN>]"),
+                cl::OneOrMore),
+    MoreHelp(MoreHelpText) {
+}
+
+void CommandLineClangTool::initialize(int argc, const char **argv) {
+  Compilations.reset(FixedCompilationDatabase::loadFromCommandLine(argc, argv));
+  cl::ParseCommandLineOptions(argc, argv);
+  if (!Compilations) {
+    std::string ErrorMessage;
+    if (!BuildPath.empty()) {
+      Compilations.reset(CompilationDatabase::autoDetectFromDirectory(
+                              BuildPath, ErrorMessage));
+    } else {
+      Compilations.reset(CompilationDatabase::autoDetectFromSource(
+                              SourcePaths[0], ErrorMessage));
+    }
+    if (!Compilations)
+      llvm::report_fatal_error(ErrorMessage);
+  }
+}
+
+int CommandLineClangTool::run(FrontendActionFactory *ActionFactory) {
+  ClangTool Tool(*Compilations, SourcePaths);
+  return Tool.run(ActionFactory);
+}

Modified: cfe/trunk/test/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CMakeLists.txt?rev=160265&r1=160264&r2=160265&view=diff
==============================================================================
--- cfe/trunk/test/CMakeLists.txt (original)
+++ cfe/trunk/test/CMakeLists.txt Mon Jul 16 07:46:48 2012
@@ -31,7 +31,7 @@
   set(CLANG_TEST_DEPS
     clang clang-headers
     c-index-test diagtool arcmt-test c-arcmt-test
-    clang-check
+    clang-check clang-ast-dump
     llvm-dis llc opt FileCheck count not
     )
   set(CLANG_TEST_PARAMS
@@ -80,7 +80,7 @@
       COMMENT "Running Clang regression tests"
       DEPENDS clang clang-headers
               c-index-test diagtool arcmt-test c-arcmt-test
-              clang-check
+              clang-check clang-ast-dump
       )
     set_target_properties(check-clang PROPERTIES FOLDER "Clang tests")
   endif()

Added: cfe/trunk/test/Tooling/clang-ast-dump.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Tooling/clang-ast-dump.cpp?rev=160265&view=auto
==============================================================================
--- cfe/trunk/test/Tooling/clang-ast-dump.cpp (added)
+++ cfe/trunk/test/Tooling/clang-ast-dump.cpp Mon Jul 16 07:46:48 2012
@@ -0,0 +1,22 @@
+// RUN: clang-ast-dump "%t/test.cpp" -f test_namespace::TheClass::theMethod -- -c 2>&1|FileCheck %s
+// FIXME: Make the above easier.
+
+// CHECK: <CXXMethod ptr="0x{{[0-9a-f]+}}" name="theMethod" prototype="true">
+// CHECK:  <ParmVar ptr="0x{{[0-9a-f]+}}" name="x" initstyle="c">
+// CHECK: (CompoundStmt
+// CHECK-NEXT:   (ReturnStmt
+// CHECK-NEXT:     (BinaryOperator
+
+namespace test_namespace {
+
+class TheClass {
+public:
+  int theMethod(int x) {
+    return x + x;
+  }
+};
+
+}
+
+// FIXME: This is incompatible to -fms-compatibility.
+// XFAIL: win32

Modified: cfe/trunk/tools/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CMakeLists.txt?rev=160265&r1=160264&r2=160265&view=diff
==============================================================================
--- cfe/trunk/tools/CMakeLists.txt (original)
+++ cfe/trunk/tools/CMakeLists.txt Mon Jul 16 07:46:48 2012
@@ -5,3 +5,4 @@
 add_subdirectory(diagtool)
 add_subdirectory(driver)
 add_subdirectory(clang-check)
+add_subdirectory(clang-ast-dump)

Modified: cfe/trunk/tools/Makefile
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/Makefile?rev=160265&r1=160264&r2=160265&view=diff
==============================================================================
--- cfe/trunk/tools/Makefile (original)
+++ cfe/trunk/tools/Makefile Mon Jul 16 07:46:48 2012
@@ -9,7 +9,7 @@
 
 CLANG_LEVEL := ..
 DIRS := driver libclang c-index-test arcmt-test c-arcmt-test diagtool \
-        clang-check
+        clang-check clang-ast-dump
 
 include $(CLANG_LEVEL)/../../Makefile.config
 

Added: cfe/trunk/tools/clang-ast-dump/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-ast-dump/CMakeLists.txt?rev=160265&view=auto
==============================================================================
--- cfe/trunk/tools/clang-ast-dump/CMakeLists.txt (added)
+++ cfe/trunk/tools/clang-ast-dump/CMakeLists.txt Mon Jul 16 07:46:48 2012
@@ -0,0 +1,8 @@
+add_clang_executable(clang-ast-dump
+  ClangASTDump.cpp
+  )
+
+target_link_libraries(clang-ast-dump
+  clangTooling
+  clangBasic
+  )

Added: cfe/trunk/tools/clang-ast-dump/ClangASTDump.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-ast-dump/ClangASTDump.cpp?rev=160265&view=auto
==============================================================================
--- cfe/trunk/tools/clang-ast-dump/ClangASTDump.cpp (added)
+++ cfe/trunk/tools/clang-ast-dump/ClangASTDump.cpp Mon Jul 16 07:46:48 2012
@@ -0,0 +1,141 @@
+//===- tools/clang-ast-dump/ClangASTDump.cpp - Clang AST Dump tool --------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file implements a clang-ast-dump tool that dumps specified parts
+//  of an AST of a number of translation units.
+//
+//  Run with '-help' for details.
+//
+//  This tool uses the Clang Tooling infrastructure, see
+//    http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html
+//  for details on setting it up with LLVM source tree.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Support/CommandLine.h"
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/ASTConsumer.h"
+#include "clang/AST/RecursiveASTVisitor.h"
+#include "clang/Frontend/FrontendActions.h"
+#include "clang/Tooling/CommandLineClangTool.h"
+#include "clang/Tooling/Tooling.h"
+
+using namespace clang::tooling;
+using namespace llvm;
+
+cl::opt<std::string> FilterString(
+  "f",
+  cl::desc("Filter string"),
+  cl::Optional);
+
+cl::opt<bool> ListAll(
+  "l",
+  cl::desc("List all filterable nodes"),
+  cl::init(false),
+  cl::Optional);
+
+static const char *MoreHelpText =
+    "-f <filter-string> can be used to dump only AST declaration nodes having\n"
+    "\ta certain substring in a qualified name.\n"
+    "\n"
+    "-l \tlists qualified names of all filterable declaration nodes.\n"
+    "\n";
+
+namespace {
+
+using namespace clang;
+
+class SelectiveDumpVisitor :
+     public RecursiveASTVisitor<SelectiveDumpVisitor> {
+  typedef RecursiveASTVisitor<SelectiveDumpVisitor> base;
+public:
+  SelectiveDumpVisitor(const std::string &FilterString, bool ListAll)
+      : FilterString(FilterString), ListAll(ListAll) {}
+
+  ASTConsumer* newASTConsumer() {
+    return new DumpConsumer(this);
+  }
+
+  bool shouldWalkTypesOfTypeLocs() const { return false; }
+
+  void Run(TranslationUnitDecl *D) {
+    if (ListAll) {
+      llvm::outs().changeColor(llvm::raw_ostream::BLUE) <<
+          "Listing all filterable nodes:\n";
+      llvm::outs().resetColor();
+      TraverseDecl(D);
+      return;
+    }
+
+    if (FilterString.empty()) {
+      llvm::outs().changeColor(llvm::raw_ostream::BLUE) <<
+          "Dumping translation unit:\n";
+      llvm::outs().resetColor();
+      D->dumpXML(llvm::outs());
+      return;
+    }
+
+    TraverseDecl(D);
+  }
+
+  bool TraverseDecl(Decl *D) {
+    if (ListAll) {
+      std::string Name = getName(D);
+      if (!Name.empty())
+        llvm::outs() << Name << "\n";
+      return base::TraverseDecl(D);
+    }
+
+    if (filterMatches(D)) {
+      llvm::outs().changeColor(llvm::raw_ostream::BLUE) <<
+          "Dumping " << getName(D) << ":\n";
+      llvm::outs().resetColor();
+      D->dumpXML(llvm::outs());
+      return true;
+    }
+    return base::TraverseDecl(D);
+  }
+
+private:
+  std::string getName(Decl *D) {
+    if (isa<NamedDecl>(D))
+      return cast<NamedDecl>(D)->getQualifiedNameAsString();
+    return "";
+  }
+  bool filterMatches(Decl *D) {
+    return getName(D).find(FilterString) != std::string::npos;
+  }
+
+  class DumpConsumer : public ASTConsumer {
+  public:
+    DumpConsumer(SelectiveDumpVisitor *Visitor) : Visitor(Visitor) {}
+
+    virtual void HandleTranslationUnit(ASTContext &Context) {
+      Visitor->Context = &Context;
+      Visitor->Run(Context.getTranslationUnitDecl());
+    }
+
+  private:
+    SelectiveDumpVisitor *Visitor;
+  };
+
+  ASTContext *Context;
+  std::string FilterString;
+  bool ListAll;
+};
+
+} // namespace
+
+int main(int argc, const char **argv) {
+  CommandLineClangTool Tool;
+  cl::extrahelp MoreHelp(MoreHelpText);
+  Tool.initialize(argc, argv);
+  SelectiveDumpVisitor Dumper(FilterString, ListAll);
+  return Tool.run(newFrontendActionFactory(&Dumper));
+}

Added: cfe/trunk/tools/clang-ast-dump/Makefile
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-ast-dump/Makefile?rev=160265&view=auto
==============================================================================
--- cfe/trunk/tools/clang-ast-dump/Makefile (added)
+++ cfe/trunk/tools/clang-ast-dump/Makefile Mon Jul 16 07:46:48 2012
@@ -0,0 +1,23 @@
+##===- tools/clang-check/Makefile --------------------------*- Makefile -*-===##
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+CLANG_LEVEL := ../..
+
+TOOLNAME = clang-ast-dump
+NO_INSTALL = 1
+
+# No plugins, optimize startup time.
+TOOL_NO_EXPORTS = 1
+
+LINK_COMPONENTS := support mc
+USEDLIBS = clangFrontend.a clangSerialization.a clangDriver.a \
+           clangTooling.a clangParse.a clangSema.a clangAnalysis.a \
+           clangEdit.a clangAST.a clangLex.a clangBasic.a
+
+include $(CLANG_LEVEL)/Makefile

Modified: cfe/trunk/tools/clang-check/ClangCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-check/ClangCheck.cpp?rev=160265&r1=160264&r2=160265&view=diff
==============================================================================
--- cfe/trunk/tools/clang-check/ClangCheck.cpp (original)
+++ cfe/trunk/tools/clang-check/ClangCheck.cpp Mon Jul 16 07:46:48 2012
@@ -1,4 +1,4 @@
-//===- examples/Tooling/ClangCheck.cpp - Clang check tool -----------------===//
+//===- tools/clang-check/ClangCheck.cpp - Clang check tool ----------------===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -10,75 +10,37 @@
 //  This file implements a clang-check tool that runs the
 //  clang::SyntaxOnlyAction over a number of translation units.
 //
+//  This tool uses the Clang Tooling infrastructure, see
+//    http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html
+//  for details on setting it up with LLVM source tree.
+//
 //===----------------------------------------------------------------------===//
 
 #include "llvm/Support/CommandLine.h"
 #include "clang/Frontend/FrontendActions.h"
-#include "clang/Tooling/CompilationDatabase.h"
+#include "clang/Tooling/CommandLineClangTool.h"
 #include "clang/Tooling/Tooling.h"
 
 using namespace clang::tooling;
 using namespace llvm;
 
-cl::opt<std::string> BuildPath(
-  "p",
-  cl::desc("<build-path>"),
-  cl::Optional);
-
-cl::list<std::string> SourcePaths(
-  cl::Positional,
-  cl::desc("<source0> [... <sourceN>]"),
-  cl::OneOrMore);
-
-static cl::extrahelp MoreHelp(
-    "\n"
-    "<build-path> is used to read a compile command database.\n"
-    "\n"
-    "For example, it can be a CMake build directory in which a file named\n"
-    "compile_commands.json exists (use -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n"
-    "CMake option to get this output). When no build path is specified,\n"
-    "clang-check will attempt to locate it automatically using all parent\n"
-    "paths of the first input file.\n"
-    "\n"
-    "<source0> ... specify the paths of source files. These paths are looked\n"
-    "up in the compile command database. If the path of a file is absolute,\n"
-    "it needs to point into CMake's source tree. If the path is relative,\n"
-    "the current working directory needs to be in the CMake source tree and\n"
-    "the file must be in a subdirectory of the current working directory.\n"
-    "\"./\" prefixes in the relative files will be automatically removed,\n"
-    "but the rest of a relative path must be a suffix of a path in the\n"
-    "compile command database.\n"
-    "\n"
-    "For example, to use clang-check on all files in a subtree of the source\n"
-    "tree, use:\n"
-    "\n"
-    "  find path/in/subtree -name '*.cpp'|xargs clang-check\n"
+static const char *MoreHelpText =
+    "\tFor example, to run clang-check on all files in a subtree of the\n"
+    "\tsource tree, use:\n"
     "\n"
-    "or using a specific build path:\n"
+    "\t  find path/in/subtree -name '*.cpp'|xargs clang-check\n"
     "\n"
-    "  find path/in/subtree -name '*.cpp'|xargs clang-check -p build/path\n"
+    "\tor using a specific build path:\n"
     "\n"
-    "Note, that path/in/subtree and current directory should follow the\n"
-    "rules described above.\n"
+    "\t  find path/in/subtree -name '*.cpp'|xargs clang-check -p build/path\n"
     "\n"
-);
+    "\tNote, that path/in/subtree and current directory should follow the\n"
+    "\trules described above.\n"
+    "\n";
 
 int main(int argc, const char **argv) {
-  llvm::OwningPtr<CompilationDatabase> Compilations(
-    FixedCompilationDatabase::loadFromCommandLine(argc, argv));
-  cl::ParseCommandLineOptions(argc, argv);
-  if (!Compilations) {
-    std::string ErrorMessage;
-    if (!BuildPath.empty()) {
-      Compilations.reset(
-         CompilationDatabase::autoDetectFromDirectory(BuildPath, ErrorMessage));
-    } else {
-      Compilations.reset(CompilationDatabase::autoDetectFromSource(
-          SourcePaths[0], ErrorMessage));
-    }
-    if (!Compilations)
-      llvm::report_fatal_error(ErrorMessage);
-  }
-  ClangTool Tool(*Compilations, SourcePaths);
+  CommandLineClangTool Tool;
+  cl::extrahelp MoreHelp(MoreHelpText);
+  Tool.initialize(argc, argv);
   return Tool.run(newFrontendActionFactory<clang::SyntaxOnlyAction>());
 }





More information about the cfe-commits mailing list