Oops, sorry, forgot a llvm commit. Please update llvm and try again. On Mar 29, 2011, at 5:21 PM, Matt Beaumont-Gay wrote:
> On Tue, Mar 29, 2011 at 17:11, Argyrios Kyrtzidis <[email protected]> wrote: >> Depends on llvm commit 128489. > > Even with both LLVM and Clang at head, I get a screenful of errors, > starting with: > > In file included from > tools/clang/lib/StaticAnalyzer/Checkers/ClangSACheckers.h:26, > from > tools/clang/lib/StaticAnalyzer/Checkers/AdjustedReturnValueChecker.cpp:16: > tools/clang/lib/StaticAnalyzer/Checkers/Checkers.inc:3:239: error: > macro "CHECKER" requires 6 arguments, but only 5 given > > -Matt > >> >> On Mar 29, 2011, at 4:57 PM, Argyrios Kyrtzidis wrote: >> >>> Author: akirtzidis >>> Date: Tue Mar 29 18:57:38 2011 >>> New Revision: 128511 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=128511&view=rev >>> Log: >>> [analyzer] For -analyzer-checker-help show all the info about groups, >>> packages, and which packages/checkers are hidden. >>> >>> Modified: >>> cfe/trunk/lib/StaticAnalyzer/Checkers/ClangSACheckerProvider.cpp >>> cfe/trunk/lib/StaticAnalyzer/Checkers/ClangSACheckers.h >>> cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp >>> >>> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/ClangSACheckerProvider.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/ClangSACheckerProvider.cpp?rev=128511&r1=128510&r2=128511&view=diff >>> ============================================================================== >>> --- cfe/trunk/lib/StaticAnalyzer/Checkers/ClangSACheckerProvider.cpp >>> (original) >>> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/ClangSACheckerProvider.cpp Tue >>> Mar 29 18:57:38 2011 >>> @@ -45,17 +45,54 @@ >>> const char *FullName; >>> void (*RegFunc)(CheckerManager &mgr); >>> const char *HelpText; >>> + int GroupIndex; >>> bool Hidden; >>> }; >>> >>> +struct StaticPackageInfoRec { >>> + const char *FullName; >>> + int GroupIndex; >>> + bool Hidden; >>> +}; >>> + >>> +struct StaticGroupInfoRec { >>> + const char *FullName; >>> +}; >>> + >>> } // end anonymous namespace. >>> >>> +static const StaticPackageInfoRec StaticPackageInfo[] = { >>> +#define GET_PACKAGES >>> +#define PACKAGE(FULLNAME, GROUPINDEX, HIDDEN) \ >>> + { FULLNAME, GROUPINDEX, HIDDEN }, >>> +#include "Checkers.inc" >>> + { 0, -1, 0 } >>> +#undef PACKAGE >>> +#undef GET_PACKAGES >>> +}; >>> + >>> +static const unsigned NumPackages = sizeof(StaticPackageInfo) >>> + / sizeof(StaticPackageInfoRec) - 1; >>> + >>> +static const StaticGroupInfoRec StaticGroupInfo[] = { >>> +#define GET_GROUPS >>> +#define GROUP(FULLNAME) \ >>> + { FULLNAME }, >>> +#include "Checkers.inc" >>> + { 0 } >>> +#undef GROUP >>> +#undef GET_GROUPS >>> +}; >>> + >>> +static const unsigned NumGroups = sizeof(StaticGroupInfo) >>> + / sizeof(StaticGroupInfoRec) - 1; >>> + >>> static const StaticCheckerInfoRec StaticCheckerInfo[] = { >>> #define GET_CHECKERS >>> -#define CHECKER(FULLNAME,CLASS,DESCFILE,HELPTEXT,HIDDEN) \ >>> - { FULLNAME, register##CLASS, HELPTEXT, HIDDEN }, >>> +#define CHECKER(FULLNAME,CLASS,DESCFILE,HELPTEXT,GROUPINDEX,HIDDEN) \ >>> + { FULLNAME, register##CLASS, HELPTEXT, GROUPINDEX, HIDDEN }, >>> #include "Checkers.inc" >>> - { 0, 0, 0, 0} >>> + { 0, 0, 0, -1, 0} >>> #undef CHECKER >>> #undef GET_CHECKERS >>> }; >>> @@ -144,6 +181,48 @@ >>> } >>> } >>> >>> +//===----------------------------------------------------------------------===// >>> +// Printing Help. >>> +//===----------------------------------------------------------------------===// >>> + >>> +static void printPackageOption(llvm::raw_ostream &OS) { >>> + // Find the maximum option length. >>> + unsigned OptionFieldWidth = 0; >>> + for (unsigned i = 0; i != NumPackages; ++i) { >>> + // Limit the amount of padding we are willing to give up for alignment. >>> + unsigned Length = strlen(StaticPackageInfo[i].FullName); >>> + if (Length <= 30) >>> + OptionFieldWidth = std::max(OptionFieldWidth, Length); >>> + } >>> + >>> + const unsigned InitialPad = 2; >>> + for (unsigned i = 0; i != NumPackages; ++i) { >>> + const StaticPackageInfoRec &package = StaticPackageInfo[i]; >>> + const std::string &Option = package.FullName; >>> + int Pad = OptionFieldWidth - int(Option.size()); >>> + OS.indent(InitialPad) << Option; >>> + >>> + if (package.GroupIndex != -1 || package.Hidden) { >>> + // Break on long option names. >>> + if (Pad < 0) { >>> + OS << "\n"; >>> + Pad = OptionFieldWidth + InitialPad; >>> + } >>> + OS.indent(Pad + 1) << "["; >>> + if (package.GroupIndex != -1) { >>> + OS << "Group=" << StaticGroupInfo[package.GroupIndex].FullName; >>> + if (package.Hidden) >>> + OS << ", "; >>> + } >>> + if (package.Hidden) >>> + OS << "Hidden"; >>> + OS << "]"; >>> + } >>> + >>> + OS << "\n"; >>> + } >>> +} >>> + >>> typedef std::map<std::string, const StaticCheckerInfoRec *> SortedCheckers; >>> >>> static void printCheckerOption(llvm::raw_ostream &OS,SortedCheckers >>> &checkers) { >>> @@ -161,6 +240,7 @@ >>> for (SortedCheckers::iterator >>> I = checkers.begin(), E = checkers.end(); I != E; ++I) { >>> const std::string &Option = I->first; >>> + const StaticCheckerInfoRec &checker = *I->second; >>> int Pad = OptionFieldWidth - int(Option.size()); >>> OS.indent(InitialPad) << Option; >>> >>> @@ -169,11 +249,36 @@ >>> OS << "\n"; >>> Pad = OptionFieldWidth + InitialPad; >>> } >>> - OS.indent(Pad + 1) << I->second->HelpText << '\n'; >>> + OS.indent(Pad + 1) << checker.HelpText; >>> + >>> + if (checker.GroupIndex != -1 || checker.Hidden) { >>> + OS << " ["; >>> + if (checker.GroupIndex != -1) { >>> + OS << "Group=" << StaticGroupInfo[checker.GroupIndex].FullName; >>> + if (checker.Hidden) >>> + OS << ", "; >>> + } >>> + if (checker.Hidden) >>> + OS << "Hidden"; >>> + OS << "]"; >>> + } >>> + >>> + OS << "\n"; >>> } >>> } >>> >>> void ClangSACheckerProvider::printHelp(llvm::raw_ostream &OS) { >>> + OS << "USAGE: -analyzer-checker <CHECKER or PACKAGE or GROUP,...>\n"; >>> + >>> + OS << "\nGROUPS:\n"; >>> + for (unsigned i = 0; i != NumGroups; ++i) >>> + OS.indent(2) << StaticGroupInfo[i].FullName << "\n"; >>> + >>> + OS << "\nPACKAGES:\n"; >>> + printPackageOption(OS); >>> + >>> + OS << "\nCHECKERS:\n"; >>> + >>> // Sort checkers according to their full name. >>> SortedCheckers checkers; >>> for (unsigned i = 0; i != NumCheckers; ++i) >>> >>> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/ClangSACheckers.h >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/ClangSACheckers.h?rev=128511&r1=128510&r2=128511&view=diff >>> ============================================================================== >>> --- cfe/trunk/lib/StaticAnalyzer/Checkers/ClangSACheckers.h (original) >>> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/ClangSACheckers.h Tue Mar 29 >>> 18:57:38 2011 >>> @@ -21,7 +21,7 @@ >>> class CheckerManager; >>> >>> #define GET_CHECKERS >>> -#define CHECKER(FULLNAME,CLASS,CXXFILE,HELPTEXT,HIDDEN) \ >>> +#define CHECKER(FULLNAME,CLASS,CXXFILE,HELPTEXT,GROUPINDEX,HIDDEN) \ >>> void register##CLASS(CheckerManager &mgr); >>> #include "Checkers.inc" >>> #undef CHECKER >>> >>> Modified: cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp?rev=128511&r1=128510&r2=128511&view=diff >>> ============================================================================== >>> --- cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp (original) >>> +++ cfe/trunk/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp Tue Mar >>> 29 18:57:38 2011 >>> @@ -57,9 +57,6 @@ >>> void ento::printCheckerHelp(llvm::raw_ostream &OS) { >>> OS << "OVERVIEW: Clang Static Analyzer Checkers List\n"; >>> OS << '\n'; >>> - OS << "USAGE: -analyzer-checker <check1,check2,...>\n"; >>> - OS << '\n'; >>> - OS << "CHECKERS:\n"; >>> >>> llvm::OwningPtr<CheckerProvider> provider(createClangSACheckerProvider()); >>> provider->printHelp(OS); >>> >>> >>> _______________________________________________ >>> 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 >> _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
