clang 17.0.0git
|
#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/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) |
enum CFNumberType |
Definition at line 354 of file BasicObjCFoundationChecks.cpp.
enum FoundationClass |
Enumerator | |
---|---|
FC_None | |
FC_NSArray | |
FC_NSDictionary | |
FC_NSEnumerator | |
FC_NSNull | |
FC_NSOrderedSet | |
FC_NSSet | |
FC_NSString |
Definition at line 60 of file BasicObjCFoundationChecks.cpp.
|
static |
If the fist block edge is a back edge, we are reentering the loop.
Definition at line 957 of file BasicObjCFoundationChecks.cpp.
References alreadyExecutedAtLeastOneLoopIteration(), clang::ento::ExplodedNode::getLocation(), P, clang::ento::ExplodedNode::pred_begin(), and clang::ento::ExplodedNode::pred_end().
Referenced by alreadyExecutedAtLeastOneLoopIteration().
|
static |
Definition at line 946 of file BasicObjCFoundationChecks.cpp.
References assumeCollectionNonEmpty(), clang::C, and clang::ObjCForCollectionStmt::getCollection().
|
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 915 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().
|
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 855 of file BasicObjCFoundationChecks.cpp.
References clang::C, clang::ento::SVal::getAs(), and clang::ObjCForCollectionStmt::getCollection().
|
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 881 of file BasicObjCFoundationChecks.cpp.
References clang::C, clang::ObjCForCollectionStmt::getCollection(), clang::ObjCForCollectionStmt::getElement(), clang::VarDecl::getInit(), clang::Expr::getType(), and isKnownNonNilCollectionType().
|
static |
Definition at line 71 of file BasicObjCFoundationChecks.cpp.
References FC_None, FC_NSArray, FC_NSDictionary, FC_NSEnumerator, FC_NSNull, FC_NSOrderedSet, FC_NSSet, FC_NSString, and findKnownClass().
Referenced by findKnownClass(), getMethodReceiverIfKnownImmutable(), and isKnownNonNilCollectionType().
|
static |
Definition at line 373 of file BasicObjCFoundationChecks.cpp.
References clang::ASTContext::CharTy, clang::ASTContext::DoubleTy, clang::ASTContext::FloatTy, clang::ASTContext::getTypeSize(), clang::ASTContext::IntTy, kCFNumberCFIndexType, kCFNumberCGFloatType, kCFNumberCharType, kCFNumberDoubleType, kCFNumberFloatType, kCFNumberIntType, kCFNumberLongLongType, kCFNumberLongType, kCFNumberNSIntegerType, kCFNumberShortType, clang::ASTContext::LongLongTy, clang::ASTContext::LongTy, and clang::ASTContext::ShortTy.
Definition at line 1053 of file BasicObjCFoundationChecks.cpp.
References FC_None, FC_NSArray, FC_NSDictionary, FC_NSEnumerator, FC_NSNull, FC_NSOrderedSet, FC_NSSet, FC_NSString, findKnownClass(), clang::ObjCMethodDecl::getClassInterface(), and clang::Decl::getDeclContext().
|
static |
Definition at line 54 of file BasicObjCFoundationChecks.cpp.
References clang::ento::ObjCMethodCall::getReceiverInterface().
Definition at line 830 of file BasicObjCFoundationChecks.cpp.
References FC_NSArray, FC_NSDictionary, FC_NSEnumerator, FC_NSOrderedSet, FC_NSSet, findKnownClass(), clang::Type::getAs(), and clang::ObjCObjectPointerType::getInterfaceDecl().
Referenced by checkElementNonNil().