[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

David Dean david_dean at apple.com
Mon Jul 16 14:09:43 PDT 2012


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





More information about the cfe-commits mailing list