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 <[email protected]> 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 <[email protected]> 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 >>> [email protected] >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > -David > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
