[cfe-commits] r128511 - in /cfe/trunk/lib/StaticAnalyzer: Checkers/ClangSACheckerProvider.cpp Checkers/ClangSACheckers.h Frontend/CheckerRegistration.cpp
Matt Beaumont-Gay
matthewbg at google.com
Tue Mar 29 17:30:30 PDT 2011
On Tue, Mar 29, 2011 at 17:26, Argyrios Kyrtzidis <kyrtzidis at apple.com> 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 <kyrtzidis at apple.com> 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
>>>> 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
>>>
>
>
More information about the cfe-commits
mailing list