clang  14.0.0git
Classes | Namespaces | Macros | Typedefs | Functions
ExprEngine.cpp File Reference
#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
#include "PrettyStackTraceLocationContext.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclBase.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/ParentMap.h"
#include "clang/AST/PrettyPrinter.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/StmtCXX.h"
#include "clang/AST/StmtObjC.h"
#include "clang/AST/Type.h"
#include "clang/Analysis/AnalysisDeclContext.h"
#include "clang/Analysis/CFG.h"
#include "clang/Analysis/ConstructionContext.h"
#include "clang/Analysis/ProgramPoint.h"
#include "clang/Basic/IdentifierTable.h"
#include "clang/Basic/JsonSupport.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/PrettyStackTrace.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/Specifiers.h"
#include "clang/StaticAnalyzer/Core/AnalyzerOptions.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/LoopUnrolling.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/LoopWidening.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState_Fwd.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/Store.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SymExpr.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/ImmutableMap.h"
#include "llvm/ADT/ImmutableSet.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/DOTGraphTraits.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/GraphWriter.h"
#include "llvm/Support/SaveAndRestore.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
#include <cstdint>
#include <memory>
#include <string>
#include <tuple>
#include <utility>
#include <vector>

Go to the source code of this file.

Classes

struct  llvm::DOTGraphTraits< ExplodedGraph * >
 

Namespaces

 llvm
 

Macros

#define DEBUG_TYPE   "ExprEngine"
 

Typedefs

typedef llvm::ImmutableMap< ConstructedObjectKey, SVal > ObjectsUnderConstructionMap
 
using ObjCForLctxPair = std::pair< const ObjCForCollectionStmt *, const LocationContext * >
 

Functions

 STATISTIC (NumRemoveDeadBindings, "The # of times RemoveDeadBindings is called")
 
 STATISTIC (NumMaxBlockCountReached, "The # of aborted paths due to reaching the maximum block count in " "a top level function")
 
 STATISTIC (NumMaxBlockCountReachedInInlined, "The # of aborted paths due to reaching the maximum block count in " "an inlined function")
 
 STATISTIC (NumTimesRetriedWithoutInlining, "The # of times we re-evaluated a call without inlining")
 
 REGISTER_TRAIT_WITH_PROGRAMSTATE (ObjectsUnderConstruction, ObjectsUnderConstructionMap) static const char *TagProviderName
 
static void printObjectsUnderConstructionJson (raw_ostream &Out, ProgramStateRef State, const char *NL, const LocationContext *LCtx, unsigned int Space=0, bool IsDot=false)
 
static bool shouldRemoveDeadBindings (AnalysisManager &AMgr, const Stmt *S, const ExplodedNode *Pred, const LocationContext *LC)
 
static SVal RecoverCastedSymbol (ProgramStateRef state, const Stmt *Condition, const LocationContext *LCtx, ASTContext &Ctx)
 RecoverCastedSymbol - A helper function for ProcessBranch that is used to try to recover some path-sensitivity for casts of symbolic integers that promote their values (which are currently not tracked well). More...
 
static const StmtgetRightmostLeaf (const Stmt *Condition)
 
static const StmtResolveCondition (const Stmt *Condition, const CFGBlock *B)
 
static Optional< std::pair< ProgramStateRef, ProgramStateRef > > assumeCondition (const Stmt *Condition, ExplodedNode *N)
 Split the state on whether there are any more iterations left for this loop. More...
 
 REGISTER_TRAIT_WITH_PROGRAMSTATE (InitializedGlobalsSet, llvm::ImmutableSet< const VarDecl * >) void ExprEngine
 The GDM component containing the set of global variables which have been previously initialized with explicit initializers. More...
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "ExprEngine"

Definition at line 88 of file ExprEngine.cpp.

Typedef Documentation

◆ ObjCForLctxPair

using ObjCForLctxPair = std::pair<const ObjCForCollectionStmt *, const LocationContext *>

Definition at line 2140 of file ExprEngine.cpp.

◆ ObjectsUnderConstructionMap

typedef llvm::ImmutableMap<ConstructedObjectKey, SVal> ObjectsUnderConstructionMap

Definition at line 192 of file ExprEngine.cpp.

Function Documentation

◆ assumeCondition()

static Optional<std::pair<ProgramStateRef, ProgramStateRef> > assumeCondition ( const Stmt Condition,
ExplodedNode *  N 
)
static

Split the state on whether there are any more iterations left for this loop.

Returns a (HasMoreIteration, HasNoMoreIteration) pair, or None when the acquisition of the loop condition value failed.

Definition at line 2170 of file ExprEngine.cpp.

References clang::Condition, clang::ento::ExprEngine::hasMoreIteration(), RecoverCastedSymbol(), clang::ento::ExprEngine::removeIterationState(), State, V, and clang::tooling::X().

Referenced by clang::ento::ExprEngine::processBranch().

◆ getRightmostLeaf()

static const Stmt* getRightmostLeaf ( const Stmt Condition)
static

Definition at line 2080 of file ExprEngine.cpp.

References clang::Condition.

Referenced by ResolveCondition().

◆ printObjectsUnderConstructionJson()

static void printObjectsUnderConstructionJson ( raw_ostream &  Out,
ProgramStateRef  State,
const char *  NL,
const LocationContext LCtx,
unsigned int  Space = 0,
bool  IsDot = false 
)
static

◆ RecoverCastedSymbol()

static SVal RecoverCastedSymbol ( ProgramStateRef  state,
const Stmt Condition,
const LocationContext LCtx,
ASTContext Ctx 
)
static

RecoverCastedSymbol - A helper function for ProcessBranch that is used to try to recover some path-sensitivity for casts of symbolic integers that promote their values (which are currently not tracked well).

This function returns the SVal bound to Condition->IgnoreCasts if all the

Definition at line 2042 of file ExprEngine.cpp.

References clang::Condition, clang::ASTContext::getTypeSize(), clang::Type::isIntegralOrEnumerationType(), and state.

Referenced by assumeCondition().

◆ REGISTER_TRAIT_WITH_PROGRAMSTATE() [1/2]

REGISTER_TRAIT_WITH_PROGRAMSTATE ( InitializedGlobalsSet  ,
llvm::ImmutableSet< const VarDecl * >   
)

The GDM component containing the set of global variables which have been previously initialized with explicit initializers.

Definition at line 2291 of file ExprEngine.cpp.

References clang::DeclStmt::getSingleDecl(), and state.

◆ REGISTER_TRAIT_WITH_PROGRAMSTATE() [2/2]

REGISTER_TRAIT_WITH_PROGRAMSTATE ( ObjectsUnderConstruction  ,
ObjectsUnderConstructionMap   
) const

◆ ResolveCondition()

static const Stmt* ResolveCondition ( const Stmt Condition,
const CFGBlock B 
)
static

◆ shouldRemoveDeadBindings()

static bool shouldRemoveDeadBindings ( AnalysisManager &  AMgr,
const Stmt S,
const ExplodedNode *  Pred,
const LocationContext LC 
)
static

Definition at line 662 of file ExprEngine.cpp.

Referenced by clang::ento::ExprEngine::ProcessStmt().

◆ STATISTIC() [1/4]

STATISTIC ( NumMaxBlockCountReached  ,
"The # of aborted paths due to reaching the maximum block count in " "a top level function"   
)

◆ STATISTIC() [2/4]

STATISTIC ( NumMaxBlockCountReachedInInlined  ,
"The # of aborted paths due to reaching the maximum block count in " "an inlined function"   
)

◆ STATISTIC() [3/4]

STATISTIC ( NumRemoveDeadBindings  ,
"The # of times RemoveDeadBindings is called"   
)

◆ STATISTIC() [4/4]

STATISTIC ( NumTimesRetriedWithoutInlining  ,
"The # of times we re-evaluated a call without inlining"   
)