clang 20.0.0git
Enumerations | Functions
BasicObjCFoundationChecks.cpp File Reference
#include "clang/AST/ASTContext.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/StmtObjC.h"
#include "clang/Analysis/DomainSpecific/CocoaConventions.h"
#include "clang/Analysis/SelectorExtras.h"
#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/CallDescription.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/Support/raw_ostream.h"
#include <optional>

Go to the source code of this file.

Enumerations

enum  FoundationClass {
  FC_None , FC_NSArray , FC_NSDictionary , FC_NSEnumerator ,
  FC_NSNull , FC_NSOrderedSet , FC_NSSet , FC_NSString
}
 
enum  CFNumberType {
  kCFNumberSInt8Type = 1 , kCFNumberSInt16Type = 2 , kCFNumberSInt32Type = 3 , kCFNumberSInt64Type = 4 ,
  kCFNumberFloat32Type = 5 , kCFNumberFloat64Type = 6 , kCFNumberCharType = 7 , kCFNumberShortType = 8 ,
  kCFNumberIntType = 9 , kCFNumberLongType = 10 , kCFNumberLongLongType = 11 , kCFNumberFloatType = 12 ,
  kCFNumberDoubleType = 13 , kCFNumberCFIndexType = 14 , kCFNumberNSIntegerType = 15 , kCFNumberCGFloatType = 16
}
 

Functions

static StringRef GetReceiverInterfaceName (const ObjCMethodCall &msg)
 
static FoundationClass findKnownClass (const ObjCInterfaceDecl *ID, bool IncludeSuperclasses=true)
 
static std::optional< uint64_t > GetCFNumberSize (ASTContext &Ctx, uint64_t i)
 
static bool isKnownNonNilCollectionType (QualType T)
 
static ProgramStateRef checkCollectionNonNil (CheckerContext &C, ProgramStateRef State, const ObjCForCollectionStmt *FCS)
 Assumes that the collection is non-nil.
 
static ProgramStateRef checkElementNonNil (CheckerContext &C, ProgramStateRef State, const ObjCForCollectionStmt *FCS)
 Assumes that the collection elements are non-nil.
 
static ProgramStateRef assumeCollectionNonEmpty (CheckerContext &C, ProgramStateRef State, SymbolRef CollectionS, bool Assumption)
 Returns NULL state if the collection is known to contain elements (or is known not to contain elements if the Assumption parameter is false.)
 
static ProgramStateRef assumeCollectionNonEmpty (CheckerContext &C, ProgramStateRef State, const ObjCForCollectionStmt *FCS, bool Assumption)
 
static bool alreadyExecutedAtLeastOneLoopIteration (const ExplodedNode *N, const ObjCForCollectionStmt *FCS)
 If the fist block edge is a back edge, we are reentering the loop.
 
static SymbolRef getMethodReceiverIfKnownImmutable (const CallEvent *Call)
 

Enumeration Type Documentation

◆ CFNumberType

Enumerator
kCFNumberSInt8Type 
kCFNumberSInt16Type 
kCFNumberSInt32Type 
kCFNumberSInt64Type 
kCFNumberFloat32Type 
kCFNumberFloat64Type 
kCFNumberCharType 
kCFNumberShortType 
kCFNumberIntType 
kCFNumberLongType 
kCFNumberLongLongType 
kCFNumberFloatType 
kCFNumberDoubleType 
kCFNumberCFIndexType 
kCFNumberNSIntegerType 
kCFNumberCGFloatType 

Definition at line 363 of file BasicObjCFoundationChecks.cpp.

◆ FoundationClass

Enumerator
FC_None 
FC_NSArray 
FC_NSDictionary 
FC_NSEnumerator 
FC_NSNull 
FC_NSOrderedSet 
FC_NSSet 
FC_NSString 

Definition at line 61 of file BasicObjCFoundationChecks.cpp.

Function Documentation

◆ alreadyExecutedAtLeastOneLoopIteration()

static bool alreadyExecutedAtLeastOneLoopIteration ( const ExplodedNode N,
const ObjCForCollectionStmt FCS 
)
static

If the fist block edge is a back edge, we are reentering the loop.

Definition at line 962 of file BasicObjCFoundationChecks.cpp.

References alreadyExecutedAtLeastOneLoopIteration(), clang::ento::ExplodedNode::getLocation(), P, and clang::ento::ExplodedNode::preds().

Referenced by alreadyExecutedAtLeastOneLoopIteration().

◆ assumeCollectionNonEmpty() [1/2]

static ProgramStateRef assumeCollectionNonEmpty ( CheckerContext C,
ProgramStateRef  State,
const ObjCForCollectionStmt FCS,
bool  Assumption 
)
static

◆ assumeCollectionNonEmpty() [2/2]

static ProgramStateRef assumeCollectionNonEmpty ( CheckerContext C,
ProgramStateRef  State,
SymbolRef  CollectionS,
bool  Assumption 
)
static

Returns NULL state if the collection is known to contain elements (or is known not to contain elements if the Assumption parameter is false.)

Definition at line 920 of file BasicObjCFoundationChecks.cpp.

References clang::C, clang::ento::SValBuilder::evalBinOp(), clang::ento::SVal::getAs(), clang::ento::SValBuilder::getConditionType(), and clang::ento::SValBuilder::makeIntVal().

Referenced by assumeCollectionNonEmpty().

◆ checkCollectionNonNil()

static ProgramStateRef checkCollectionNonNil ( CheckerContext C,
ProgramStateRef  State,
const ObjCForCollectionStmt FCS 
)
static

Assumes that the collection is non-nil.

If the collection is known to be nil, returns NULL to indicate an infeasible path.

Definition at line 860 of file BasicObjCFoundationChecks.cpp.

References clang::C, clang::ento::SVal::getAs(), and clang::ObjCForCollectionStmt::getCollection().

◆ checkElementNonNil()

static ProgramStateRef checkElementNonNil ( CheckerContext C,
ProgramStateRef  State,
const ObjCForCollectionStmt FCS 
)
static

Assumes that the collection elements are non-nil.

This only applies if the collection is one of those known not to contain nil values.

Definition at line 886 of file BasicObjCFoundationChecks.cpp.

References clang::C, clang::ObjCForCollectionStmt::getCollection(), clang::ObjCForCollectionStmt::getElement(), clang::VarDecl::getInit(), clang::Expr::getType(), and isKnownNonNilCollectionType().

◆ findKnownClass()

static FoundationClass findKnownClass ( const ObjCInterfaceDecl ID,
bool  IncludeSuperclasses = true 
)
static

◆ GetCFNumberSize()

static std::optional< uint64_t > GetCFNumberSize ( ASTContext Ctx,
uint64_t  i 
)
static

◆ getMethodReceiverIfKnownImmutable()

static SymbolRef getMethodReceiverIfKnownImmutable ( const CallEvent Call)
static

◆ GetReceiverInterfaceName()

static StringRef GetReceiverInterfaceName ( const ObjCMethodCall msg)
static

◆ isKnownNonNilCollectionType()

static bool isKnownNonNilCollectionType ( QualType  T)
static