clang  10.0.0git
Macros | Enumerations | Functions
NullabilityChecker.cpp File Reference
#include "clang/StaticAnalyzer/Checkers/BuiltinCheckerRegistration.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerHelpers.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/Path.h"
Include dependency graph for NullabilityChecker.cpp:

Go to the source code of this file.

Macros

#define REGISTER_CHECKER(name, trackingRequired)
 

Enumerations

enum  ErrorKind : int
 

Functions

 REGISTER_MAP_WITH_PROGRAMSTATE (NullabilityMap, const MemRegion *, NullabilityState) enum class NullConstraint
 
static NullConstraint getNullConstraint (DefinedOrUnknownSVal Val, ProgramStateRef State)
 
static bool checkValueAtLValForInvariantViolation (ProgramStateRef State, SVal LV, QualType T)
 Returns true when the value stored at the given location has been constrained to null after being passed through an object of nonnnull type. More...
 
static bool checkParamsForPreconditionViolation (ArrayRef< ParmVarDecl *> Params, ProgramStateRef State, const LocationContext *LocCtxt)
 
static bool checkSelfIvarsForInvariantViolation (ProgramStateRef State, const LocationContext *LocCtxt)
 
static bool checkInvariantViolation (ProgramStateRef State, ExplodedNode *N, CheckerContext &C)
 
static const ExprlookThroughImplicitCasts (const Expr *E)
 Find the outermost subexpression of E that is not an implicit cast. More...
 
static Nullability getReceiverNullability (const ObjCMethodCall &M, ProgramStateRef State)
 
static const ExprmatchValueExprForBind (const Stmt *S)
 For a given statement performing a bind, attempt to syntactically match the expression resulting in the bound value. More...
 
static bool isARCNilInitializedLocal (CheckerContext &C, const Stmt *S)
 Returns true if. More...
 

Macro Definition Documentation

◆ REGISTER_CHECKER

#define REGISTER_CHECKER (   name,
  trackingRequired 
)
Value:
void ento::register##name##Checker(CheckerManager &mgr) { \
NullabilityChecker *checker = mgr.getChecker<NullabilityChecker>(); \
checker->Filter.Check##name = true; \
checker->Filter.CheckName##name = mgr.getCurrentCheckerName(); \
checker->NeedTracking = checker->NeedTracking || trackingRequired; \
checker->NoDiagnoseCallsToSystemHeaders = \
checker->NoDiagnoseCallsToSystemHeaders || \
mgr.getAnalyzerOptions().getCheckerBooleanOption( \
checker, "NoDiagnoseCallsToSystemHeaders", true); \
} \
\
bool ento::shouldRegister##name##Checker(const LangOptions &LO) { \
return true; \
}
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Definition: LangOptions.h:53
RangeSelector name(std::string ID)
Given a node with a "name", (like NamedDecl, DeclRefExpr or CxxCtorInitializer) selects the name&#39;s to...

Definition at line 1195 of file NullabilityChecker.cpp.

Enumeration Type Documentation

◆ ErrorKind

enum ErrorKind : int
strong

Definition at line 70 of file NullabilityChecker.cpp.

Function Documentation

◆ checkInvariantViolation()

static bool checkInvariantViolation ( ProgramStateRef  State,
ExplodedNode *  N,
CheckerContext &  C 
)
static

◆ checkParamsForPreconditionViolation()

static bool checkParamsForPreconditionViolation ( ArrayRef< ParmVarDecl *>  Params,
ProgramStateRef  State,
const LocationContext LocCtxt 
)
static

Definition at line 357 of file NullabilityChecker.cpp.

References checkValueAtLValForInvariantViolation().

Referenced by checkInvariantViolation().

◆ checkSelfIvarsForInvariantViolation()

static bool checkSelfIvarsForInvariantViolation ( ProgramStateRef  State,
const LocationContext LocCtxt 
)
static

◆ checkValueAtLValForInvariantViolation()

static bool checkValueAtLValForInvariantViolation ( ProgramStateRef  State,
SVal  LV,
QualType  T 
)
static

Returns true when the value stored at the given location has been constrained to null after being passed through an object of nonnnull type.

Definition at line 331 of file NullabilityChecker.cpp.

References clang::ento::getNullabilityAnnotation(), getNullConstraint(), and clang::ento::Nonnull.

Referenced by checkParamsForPreconditionViolation(), and checkSelfIvarsForInvariantViolation().

◆ getNullConstraint()

static NullConstraint getNullConstraint ( DefinedOrUnknownSVal  Val,
ProgramStateRef  State 
)
static

Definition at line 262 of file NullabilityChecker.cpp.

References State, and clang::Unknown.

Referenced by checkValueAtLValForInvariantViolation(), and getReceiverNullability().

◆ getReceiverNullability()

static Nullability getReceiverNullability ( const ObjCMethodCall M,
ProgramStateRef  State 
)
static

◆ isARCNilInitializedLocal()

static bool isARCNilInitializedLocal ( CheckerContext &  C,
const Stmt S 
)
static

Returns true if.

Parameters
Sis a DeclStmt for a local variable that ObjC automated reference counting initialized with zero.

Definition at line 1006 of file NullabilityChecker.cpp.

◆ lookThroughImplicitCasts()

static const Expr* lookThroughImplicitCasts ( const Expr E)
static

Find the outermost subexpression of E that is not an implicit cast.

This looks through the implicit casts to _Nonnull that ARC adds to return expressions of ObjC types when the return type of the function or method is non-null but the express is not.

Definition at line 510 of file NullabilityChecker.cpp.

◆ matchValueExprForBind()

static const Expr* matchValueExprForBind ( const Stmt S)
static

For a given statement performing a bind, attempt to syntactically match the expression resulting in the bound value.

Definition at line 982 of file NullabilityChecker.cpp.

◆ REGISTER_MAP_WITH_PROGRAMSTATE()

REGISTER_MAP_WITH_PROGRAMSTATE ( NullabilityMap  ,
const MemRegion *  ,
NullabilityState   
)

Definition at line 231 of file NullabilityChecker.cpp.