[cfe-commits] r128511 - in /cfe/trunk/lib/StaticAnalyzer: Checkers/ClangSACheckerProvider.cpp Checkers/ClangSACheckers.h Frontend/CheckerRegistration.cpp
Argyrios Kyrtzidis
kyrtzidis at apple.com
Tue Mar 29 17:26:37 PDT 2011
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 <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