[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

Jordan Rose jordan_rose at apple.com
Mon Jul 16 14:16:17 PDT 2012


Release-Asserts isn't supported right now, right, Alexander?

http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-July/023009.html

Not sure how to fix the test in the meantime...


On Jul 16, 2012, at 14:09 , David Dean <david_dean at apple.com> wrote:

> It doesn't appear to be exclusive to i386, maybe release without asserts?:
> 
> ******************** TEST 'Clang :: Tooling/clang-ast-dump.cpp' FAILED ********************Script:
> --
> clang-ast-dump "/Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-R/clang.src/test/Tooling/clang-ast-dump.cpp" -f test_namespace::TheClass::theMethod -- -c 2>&1|FileCheck /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-R/clang.src/test/Tooling/clang-ast-dump.cpp
> --
> Exit Code: 1
> Command Output (stderr):
> --
> /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-R/clang.src/test/Tooling/clang-ast-dump.cpp:3:11: error: expected string not found in input
> // CHECK: <CXXMethod ptr="0x{{[0-9a-f]+}}" name="theMethod" prototype="true">
>          ^
> <stdin>:1:1: note: scanning from here
> Processing: /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-R/clang.src/test/Tooling/clang-ast-dump.cpp.
> ^
> --
> 
> ********************
> 
> Is there anything I can grab off the builder to help?
> 
> On 16 Jul 2012, at 1:13 PM, Jim Grosbach wrote:
> 
>> Hi Alexander,
>> 
>> This test is failing on i386 (32-bit) Darwin:
>> 
>>> 	/Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.apple-clang-x86_64-darwin10-R/clang.src/src/tools/clang/test/Tooling/clang-ast-dump.cpp:3:11: error: expected string not found in input
>>> 	// CHECK: <CXXMethod ptr="0x{{[0-9a-f]+}}" name="theMethod" prototype="true">
>>> 	          ^
>> 
>> 
>> Any idea why that would be? It's not obvious to me what's going wrong.
>> 
>> -Jim
>> 
>> On Jul 16, 2012, at 5:46 AM, Alexander Kornienko <alexfh at google.com> wrote:
>> 
>>> 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>());
>>> }
>>> 
>>> 
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 
> -David
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list