clang
10.0.0git
|
#include "clang/StaticAnalyzer/Checkers/BuiltinCheckerRegistration.h"
#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/Core/BugReporter/BugType.h"
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.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"
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 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. More... | |
static ProgramStateRef | checkElementNonNil (CheckerContext &C, ProgramStateRef State, const ObjCForCollectionStmt *FCS) |
Assumes that the collection elements are non-nil. More... | |
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.) More... | |
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. More... | |
static SymbolRef | getMethodReceiverIfKnownImmutable (const CallEvent *Call) |
enum CFNumberType |
Definition at line 356 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 58 of file BasicObjCFoundationChecks.cpp.
|
static |
If the fist block edge is a back edge, we are reentering the loop.
Definition at line 956 of file BasicObjCFoundationChecks.cpp.
References assumeCollectionNonEmpty(), checkCollectionNonNil(), checkElementNonNil(), clang::ProgramPoint::getAs(), P, clang::ento::ExplodedNode::pred_begin(), and State.
|
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 914 of file BasicObjCFoundationChecks.cpp.
References State.
Referenced by alreadyExecutedAtLeastOneLoopIteration(), and assumeCollectionNonEmpty().
|
static |
Definition at line 945 of file BasicObjCFoundationChecks.cpp.
References assumeCollectionNonEmpty(), and clang::ObjCForCollectionStmt::getCollection().
|
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::ObjCForCollectionStmt::getCollection(), and State.
Referenced by alreadyExecutedAtLeastOneLoopIteration().
|
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 880 of file BasicObjCFoundationChecks.cpp.
References clang::ObjCForCollectionStmt::getCollection(), clang::ObjCForCollectionStmt::getElement(), clang::VarDecl::getInit(), clang::Expr::getType(), isKnownNonNilCollectionType(), and State.
Referenced by alreadyExecutedAtLeastOneLoopIteration().
|
static |
Definition at line 69 of file BasicObjCFoundationChecks.cpp.
References FC_None, FC_NSArray, FC_NSDictionary, FC_NSEnumerator, FC_NSNull, FC_NSOrderedSet, FC_NSSet, FC_NSString, clang::ObjCMethodCall::getArgExpr(), clang::NamedDecl::getIdentifier(), clang::ObjCMethodCall::getMessageKind(), clang::IdentifierInfo::getName(), clang::ObjCMethodCall::getReceiverInterface(), GetReceiverInterfaceName(), clang::ObjCMethodCall::getSelector(), clang::Stmt::getSourceRange(), clang::ObjCInterfaceDecl::getSuperClass(), clang::OCM_Subscript, clang::Selector::print(), State, and UINT_MAX.
Referenced by getMethodReceiverIfKnownImmutable(), and isKnownNonNilCollectionType().
|
static |
Definition at line 375 of file BasicObjCFoundationChecks.cpp.
References clang::ASTContext::CharTy, clang::ASTContext::DoubleTy, clang::ASTContext::FloatTy, clang::IdentifierTable::get(), clang::CallExpr::getArg(), clang::ASTContext::getCanonicalType(), clang::NamedDecl::getIdentifier(), getName(), clang::GetNullarySelector(), clang::CallExpr::getNumArgs(), clang::ObjCMethodCall::getReceiverInterface(), clang::Stmt::getSourceRange(), clang::ASTContext::getTypeSize(), clang::ASTContext::Idents, clang::ASTContext::IntTy, clang::ObjCMethodCall::isInstanceMessage(), clang::Type::isIntegralOrEnumerationType(), kCFNumberCFIndexType, kCFNumberCGFloatType, kCFNumberCharType, kCFNumberDoubleType, kCFNumberFloatType, kCFNumberIntType, kCFNumberLongLongType, kCFNumberLongType, kCFNumberNSIntegerType, kCFNumberShortType, clang::ASTContext::LongLongTy, clang::ASTContext::LongTy, clang::ento::OS, clang::ASTContext::ShortTy, clang::CodeGen::state, and V.
|
static |
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(), clang::ObjCMethodCall::getDecl(), clang::Decl::getDeclContext(), clang::ObjCMethodDecl::getMethodFamily(), clang::GetNullarySelector(), clang::ObjCMethodCall::getOriginExpr(), clang::ObjCMethodCall::getReceiverInterface(), clang::ObjCMessageExpr::getReceiverInterface(), clang::ObjCMethodCall::getReceiverSVal(), clang::ObjCMethodCall::getSelector(), clang::GetUnarySelector(), Initialized, clang::ObjCMethodCall::isReceiverSelfOrSuper(), clang::OMF_init, and State.
|
static |
Definition at line 52 of file BasicObjCFoundationChecks.cpp.
References clang::ObjCMethodCall::getReceiverInterface().
Referenced by findKnownClass().
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().