Skip to content

Commit

Permalink
[analyzer][NFC] Change LangOptions to CheckerManager in the shouldReg…
Browse files Browse the repository at this point in the history
…ister* functions

Some checkers may not only depend on language options but also analyzer options.
To make this possible this patch changes the parameter of the shouldRegister*
function to CheckerManager to be able to query the analyzer options when
deciding whether the checker should be registered.

Differential Revision: https://reviews.llvm.org/D75271
  • Loading branch information
Szelethus committed Mar 27, 2020
1 parent 08d5426 commit bda3dd0
Show file tree
Hide file tree
Showing 116 changed files with 175 additions and 162 deletions.
Expand Up @@ -28,7 +28,7 @@ class CheckerRegistry;
#define GET_CHECKERS
#define CHECKER(FULLNAME, CLASS, HELPTEXT, DOC_URI, IS_HIDDEN) \
void register##CLASS(CheckerManager &mgr); \
bool shouldRegister##CLASS(const LangOptions &LO);
bool shouldRegister##CLASS(const CheckerManager &mgr);
#include "clang/StaticAnalyzer/Checkers/Checkers.inc"
#undef CHECKER
#undef GET_CHECKERS
Expand Down
13 changes: 6 additions & 7 deletions clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h
Expand Up @@ -69,7 +69,6 @@ namespace clang {

class AnalyzerOptions;
class DiagnosticsEngine;
class LangOptions;

namespace ento {

Expand All @@ -96,7 +95,7 @@ class CheckerRegistry {
/// Initialization functions perform any necessary setup for a checker.
/// They should include a call to CheckerManager::registerChecker.
using InitializationFunction = void (*)(CheckerManager &);
using ShouldRegisterFunction = bool (*)(const LangOptions &);
using ShouldRegisterFunction = bool (*)(const CheckerManager &);

/// Specifies a command line option. It may either belong to a checker or a
/// package.
Expand Down Expand Up @@ -168,12 +167,12 @@ class CheckerRegistry {

ConstCheckerInfoList Dependencies;

bool isEnabled(const LangOptions &LO) const {
return State == StateFromCmdLine::State_Enabled && ShouldRegister(LO);
bool isEnabled(const CheckerManager &mgr) const {
return State == StateFromCmdLine::State_Enabled && ShouldRegister(mgr);
}

bool isDisabled(const LangOptions &LO) const {
return State == StateFromCmdLine::State_Disabled || !ShouldRegister(LO);
bool isDisabled(const CheckerManager &mgr) const {
return State == StateFromCmdLine::State_Disabled || !ShouldRegister(mgr);
}

// Since each checker must have a different full name, we can identify
Expand Down Expand Up @@ -220,7 +219,7 @@ class CheckerRegistry {
mgr.template registerChecker<T>();
}

template <typename T> static bool returnTrue(const LangOptions &) {
template <typename T> static bool returnTrue(const CheckerManager &mgr) {
return true;
}

Expand Down
Expand Up @@ -20,6 +20,8 @@ class AnalyzerOptions;

namespace ento {

class CheckerManager;

//===----------------------------------------------------------------------===//
// AST Consumer Actions
//===----------------------------------------------------------------------===//
Expand Down Expand Up @@ -52,7 +54,6 @@ class ParseModelFileAction : public ASTFrontendAction {
};

} // namespace ento

} // end namespace clang

#endif
Expand Up @@ -21,7 +21,7 @@ void registerMyChecker(CheckerManager &Mgr) {
<< '\n';
}

bool shouldRegisterMyChecker(const LangOptions &LO) { return true; }
bool shouldRegisterMyChecker(const CheckerManager &mgr) { return true; }

} // end anonymous namespace

Expand Down
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/AnalysisOrderChecker.cpp
Expand Up @@ -186,6 +186,6 @@ void ento::registerAnalysisOrderChecker(CheckerManager &mgr) {
mgr.registerChecker<AnalysisOrderChecker>();
}

bool ento::shouldRegisterAnalysisOrderChecker(const LangOptions &LO) {
bool ento::shouldRegisterAnalysisOrderChecker(const CheckerManager &mgr) {
return true;
}
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/AnalyzerStatsChecker.cpp
Expand Up @@ -140,6 +140,6 @@ void ento::registerAnalyzerStatsChecker(CheckerManager &mgr) {
mgr.registerChecker<AnalyzerStatsChecker>();
}

bool ento::shouldRegisterAnalyzerStatsChecker(const LangOptions &LO) {
bool ento::shouldRegisterAnalyzerStatsChecker(const CheckerManager &mgr) {
return true;
}
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/ArrayBoundChecker.cpp
Expand Up @@ -92,6 +92,6 @@ void ento::registerArrayBoundChecker(CheckerManager &mgr) {
mgr.registerChecker<ArrayBoundChecker>();
}

bool ento::shouldRegisterArrayBoundChecker(const LangOptions &LO) {
bool ento::shouldRegisterArrayBoundChecker(const CheckerManager &mgr) {
return true;
}
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/ArrayBoundCheckerV2.cpp
Expand Up @@ -356,6 +356,6 @@ void ento::registerArrayBoundCheckerV2(CheckerManager &mgr) {
mgr.registerChecker<ArrayBoundCheckerV2>();
}

bool ento::shouldRegisterArrayBoundCheckerV2(const LangOptions &LO) {
bool ento::shouldRegisterArrayBoundCheckerV2(const CheckerManager &mgr) {
return true;
}
14 changes: 7 additions & 7 deletions clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp
Expand Up @@ -1243,54 +1243,54 @@ void ento::registerNilArgChecker(CheckerManager &mgr) {
mgr.registerChecker<NilArgChecker>();
}

bool ento::shouldRegisterNilArgChecker(const LangOptions &LO) {
bool ento::shouldRegisterNilArgChecker(const CheckerManager &mgr) {
return true;
}

void ento::registerCFNumberChecker(CheckerManager &mgr) {
mgr.registerChecker<CFNumberChecker>();
}

bool ento::shouldRegisterCFNumberChecker(const LangOptions &LO) {
bool ento::shouldRegisterCFNumberChecker(const CheckerManager &mgr) {
return true;
}

void ento::registerCFRetainReleaseChecker(CheckerManager &mgr) {
mgr.registerChecker<CFRetainReleaseChecker>();
}

bool ento::shouldRegisterCFRetainReleaseChecker(const LangOptions &LO) {
bool ento::shouldRegisterCFRetainReleaseChecker(const CheckerManager &mgr) {
return true;
}

void ento::registerClassReleaseChecker(CheckerManager &mgr) {
mgr.registerChecker<ClassReleaseChecker>();
}

bool ento::shouldRegisterClassReleaseChecker(const LangOptions &LO) {
bool ento::shouldRegisterClassReleaseChecker(const CheckerManager &mgr) {
return true;
}

void ento::registerVariadicMethodTypeChecker(CheckerManager &mgr) {
mgr.registerChecker<VariadicMethodTypeChecker>();
}

bool ento::shouldRegisterVariadicMethodTypeChecker(const LangOptions &LO) {
bool ento::shouldRegisterVariadicMethodTypeChecker(const CheckerManager &mgr) {
return true;
}

void ento::registerObjCLoopChecker(CheckerManager &mgr) {
mgr.registerChecker<ObjCLoopChecker>();
}

bool ento::shouldRegisterObjCLoopChecker(const LangOptions &LO) {
bool ento::shouldRegisterObjCLoopChecker(const CheckerManager &mgr) {
return true;
}

void ento::registerObjCNonNilReturnValueChecker(CheckerManager &mgr) {
mgr.registerChecker<ObjCNonNilReturnValueChecker>();
}

bool ento::shouldRegisterObjCNonNilReturnValueChecker(const LangOptions &LO) {
bool ento::shouldRegisterObjCNonNilReturnValueChecker(const CheckerManager &mgr) {
return true;
}
Expand Up @@ -184,6 +184,6 @@ void ento::registerBlockInCriticalSectionChecker(CheckerManager &mgr) {
mgr.registerChecker<BlockInCriticalSectionChecker>();
}

bool ento::shouldRegisterBlockInCriticalSectionChecker(const LangOptions &LO) {
bool ento::shouldRegisterBlockInCriticalSectionChecker(const CheckerManager &mgr) {
return true;
}
Expand Up @@ -96,6 +96,6 @@ void ento::registerBoolAssignmentChecker(CheckerManager &mgr) {
mgr.registerChecker<BoolAssignmentChecker>();
}

bool ento::shouldRegisterBoolAssignmentChecker(const LangOptions &LO) {
bool ento::shouldRegisterBoolAssignmentChecker(const CheckerManager &mgr) {
return true;
}
Expand Up @@ -135,6 +135,6 @@ void ento::registerBuiltinFunctionChecker(CheckerManager &mgr) {
mgr.registerChecker<BuiltinFunctionChecker>();
}

bool ento::shouldRegisterBuiltinFunctionChecker(const LangOptions &LO) {
bool ento::shouldRegisterBuiltinFunctionChecker(const CheckerManager &mgr) {
return true;
}
4 changes: 2 additions & 2 deletions clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
Expand Up @@ -2430,7 +2430,7 @@ void ento::registerCStringModeling(CheckerManager &Mgr) {
Mgr.registerChecker<CStringChecker>();
}

bool ento::shouldRegisterCStringModeling(const LangOptions &LO) {
bool ento::shouldRegisterCStringModeling(const CheckerManager &mgr) {
return true;
}

Expand All @@ -2441,7 +2441,7 @@ bool ento::shouldRegisterCStringModeling(const LangOptions &LO) {
checker->Filter.CheckName##name = mgr.getCurrentCheckerName(); \
} \
\
bool ento::shouldRegister##name(const LangOptions &LO) { return true; }
bool ento::shouldRegister##name(const CheckerManager &mgr) { return true; }

REGISTER_CHECKER(CStringNullArg)
REGISTER_CHECKER(CStringOutOfBounds)
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/CStringSyntaxChecker.cpp
Expand Up @@ -291,6 +291,6 @@ void ento::registerCStringSyntaxChecker(CheckerManager &mgr) {
mgr.registerChecker<CStringSyntaxChecker>();
}

bool ento::shouldRegisterCStringSyntaxChecker(const LangOptions &LO) {
bool ento::shouldRegisterCStringSyntaxChecker(const CheckerManager &mgr) {
return true;
}
Expand Up @@ -76,6 +76,6 @@ void ento::registerCXXSelfAssignmentChecker(CheckerManager &Mgr) {
Mgr.registerChecker<CXXSelfAssignmentChecker>();
}

bool ento::shouldRegisterCXXSelfAssignmentChecker(const LangOptions &LO) {
bool ento::shouldRegisterCXXSelfAssignmentChecker(const CheckerManager &mgr) {
return true;
}
4 changes: 2 additions & 2 deletions clang/lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp
Expand Up @@ -605,7 +605,7 @@ void ento::registerCallAndMessageChecker(CheckerManager &mgr) {
mgr.registerChecker<CallAndMessageChecker>();
}

bool ento::shouldRegisterCallAndMessageChecker(const LangOptions &LO) {
bool ento::shouldRegisterCallAndMessageChecker(const CheckerManager &mgr) {
return true;
}

Expand All @@ -615,6 +615,6 @@ void ento::registerCallAndMessageUnInitRefArg(CheckerManager &mgr) {
Checker->CheckName_CallAndMessageUnInitRefArg = mgr.getCurrentCheckerName();
}

bool ento::shouldRegisterCallAndMessageUnInitRefArg(const LangOptions &LO) {
bool ento::shouldRegisterCallAndMessageUnInitRefArg(const CheckerManager &mgr) {
return true;
}
3 changes: 2 additions & 1 deletion clang/lib/StaticAnalyzer/Checkers/CastSizeChecker.cpp
Expand Up @@ -146,10 +146,11 @@ void ento::registerCastSizeChecker(CheckerManager &mgr) {
mgr.registerChecker<CastSizeChecker>();
}

bool ento::shouldRegisterCastSizeChecker(const LangOptions &LO) {
bool ento::shouldRegisterCastSizeChecker(const CheckerManager &mgr) {
// PR31226: C++ is more complicated than what this checker currently supports.
// There are derived-to-base casts, there are different rules for 0-size
// structures, no flexible arrays, etc.
// FIXME: Disabled on C++ for now.
const LangOptions &LO = mgr.getLangOpts();
return !LO.CPlusPlus;
}
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/CastToStructChecker.cpp
Expand Up @@ -120,6 +120,6 @@ void ento::registerCastToStructChecker(CheckerManager &mgr) {
mgr.registerChecker<CastToStructChecker>();
}

bool ento::shouldRegisterCastToStructChecker(const LangOptions &LO) {
bool ento::shouldRegisterCastToStructChecker(const CheckerManager &mgr) {
return true;
}
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/CastValueChecker.cpp
Expand Up @@ -436,6 +436,6 @@ void ento::registerCastValueChecker(CheckerManager &Mgr) {
Mgr.registerChecker<CastValueChecker>();
}

bool ento::shouldRegisterCastValueChecker(const LangOptions &LO) {
bool ento::shouldRegisterCastValueChecker(const CheckerManager &mgr) {
return true;
}
3 changes: 2 additions & 1 deletion clang/lib/StaticAnalyzer/Checkers/CheckObjCDealloc.cpp
Expand Up @@ -1088,7 +1088,8 @@ void ento::registerObjCDeallocChecker(CheckerManager &Mgr) {
Mgr.registerChecker<ObjCDeallocChecker>();
}

bool ento::shouldRegisterObjCDeallocChecker(const LangOptions &LO) {
bool ento::shouldRegisterObjCDeallocChecker(const CheckerManager &mgr) {
// These checker only makes sense under MRR.
const LangOptions &LO = mgr.getLangOpts();
return LO.getGC() != LangOptions::GCOnly && !LO.ObjCAutoRefCount;
}
Expand Up @@ -138,6 +138,6 @@ void ento::registerObjCMethSigsChecker(CheckerManager &mgr) {
mgr.registerChecker<ObjCMethSigsChecker>();
}

bool ento::shouldRegisterObjCMethSigsChecker(const LangOptions &LO) {
bool ento::shouldRegisterObjCMethSigsChecker(const CheckerManager &mgr) {
return true;
}
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/CheckPlacementNew.cpp
Expand Up @@ -129,6 +129,6 @@ void ento::registerPlacementNewChecker(CheckerManager &mgr) {
mgr.registerChecker<PlacementNewChecker>();
}

bool ento::shouldRegisterPlacementNewChecker(const LangOptions &LO) {
bool ento::shouldRegisterPlacementNewChecker(const CheckerManager &mgr) {
return true;
}
4 changes: 2 additions & 2 deletions clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp
Expand Up @@ -1076,7 +1076,7 @@ void ento::registerSecuritySyntaxChecker(CheckerManager &mgr) {
mgr.registerChecker<SecuritySyntaxChecker>();
}

bool ento::shouldRegisterSecuritySyntaxChecker(const LangOptions &LO) {
bool ento::shouldRegisterSecuritySyntaxChecker(const CheckerManager &mgr) {
return true;
}

Expand All @@ -1087,7 +1087,7 @@ bool ento::shouldRegisterSecuritySyntaxChecker(const LangOptions &LO) {
checker->filter.checkName_##name = mgr.getCurrentCheckerName(); \
} \
\
bool ento::shouldRegister##name(const LangOptions &LO) { return true; }
bool ento::shouldRegister##name(const CheckerManager &mgr) { return true; }

REGISTER_CHECKER(bcmp)
REGISTER_CHECKER(bcopy)
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/CheckSizeofPointer.cpp
Expand Up @@ -91,6 +91,6 @@ void ento::registerSizeofPointerChecker(CheckerManager &mgr) {
mgr.registerChecker<SizeofPointerChecker>();
}

bool ento::shouldRegisterSizeofPointerChecker(const LangOptions &LO) {
bool ento::shouldRegisterSizeofPointerChecker(const CheckerManager &mgr) {
return true;
}
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/ChrootChecker.cpp
Expand Up @@ -136,6 +136,6 @@ void ento::registerChrootChecker(CheckerManager &mgr) {
mgr.registerChecker<ChrootChecker>();
}

bool ento::shouldRegisterChrootChecker(const LangOptions &LO) {
bool ento::shouldRegisterChrootChecker(const CheckerManager &mgr) {
return true;
}
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/CloneChecker.cpp
Expand Up @@ -208,6 +208,6 @@ void ento::registerCloneChecker(CheckerManager &Mgr) {
.getCheckerStringOption(Checker, "IgnoredFilesPattern");
}

bool ento::shouldRegisterCloneChecker(const LangOptions &LO) {
bool ento::shouldRegisterCloneChecker(const CheckerManager &mgr) {
return true;
}
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/ContainerModeling.cpp
Expand Up @@ -1067,6 +1067,6 @@ void ento::registerContainerModeling(CheckerManager &mgr) {
mgr.registerChecker<ContainerModeling>();
}

bool ento::shouldRegisterContainerModeling(const LangOptions &LO) {
bool ento::shouldRegisterContainerModeling(const CheckerManager &mgr) {
return true;
}
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/ConversionChecker.cpp
Expand Up @@ -196,6 +196,6 @@ void ento::registerConversionChecker(CheckerManager &mgr) {
mgr.registerChecker<ConversionChecker>();
}

bool ento::shouldRegisterConversionChecker(const LangOptions &LO) {
bool ento::shouldRegisterConversionChecker(const CheckerManager &mgr) {
return true;
}
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp
Expand Up @@ -540,6 +540,6 @@ void ento::registerDeadStoresChecker(CheckerManager &Mgr) {
AnOpts.getCheckerBooleanOption(Chk, "ShowFixIts");
}

bool ento::shouldRegisterDeadStoresChecker(const LangOptions &LO) {
bool ento::shouldRegisterDeadStoresChecker(const CheckerManager &mgr) {
return true;
}

0 comments on commit bda3dd0

Please sign in to comment.