On Tue, Mar 29, 2011 at 17:26, Argyrios Kyrtzidis <[email protected]> wrote: > Oops, sorry, forgot a llvm commit. Please update llvm and try again. >
Looks good, thanks! > 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
