clang  8.0.0svn
Macros | Enumerations | Functions
UninitializedValues.cpp File Reference
#include "clang/Analysis/Analyses/UninitializedValues.h"
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclBase.h"
#include "clang/AST/Expr.h"
#include "clang/AST/OperationKinds.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/StmtObjC.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/AST/Type.h"
#include "clang/Analysis/Analyses/PostOrderCFGView.h"
#include "clang/Analysis/AnalysisDeclContext.h"
#include "clang/Analysis/CFG.h"
#include "clang/Analysis/DomainSpecific/ObjCNoReturn.h"
#include "clang/Basic/LLVM.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/None.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/PackedVector.h"
#include "llvm/ADT/SmallBitVector.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Support/Casting.h"
#include <algorithm>
#include <cassert>
Include dependency graph for UninitializedValues.cpp:

Go to the source code of this file.

Macros

#define DEBUG_LOGGING   0
 

Enumerations

enum  Value { Unknown = 0x0, Initialized = 0x1, Uninitialized = 0x2, MayUninitialized = 0x3 }
 

Functions

static bool isTrackedVar (const VarDecl *vd, const DeclContext *dc)
 
static bool isUninitialized (const Value v)
 
static bool isAlwaysUninit (const Value v)
 
static const ExprstripCasts (ASTContext &C, const Expr *Ex)
 
static FindVarResult findVar (const Expr *E, const DeclContext *DC)
 If E is an expression comprising a reference to a single variable, find that variable. More...
 
static const DeclRefExprgetSelfInitExpr (VarDecl *VD)
 
static bool isPointerToConst (const QualType &QT)
 
static bool runOnBlock (const CFGBlock *block, const CFG &cfg, AnalysisDeclContext &ac, CFGBlockValues &vals, const ClassifyRefs &classification, llvm::BitVector &wasAnalyzed, UninitVariablesHandler &handler)
 

Macro Definition Documentation

◆ DEBUG_LOGGING

#define DEBUG_LOGGING   0

Definition at line 42 of file UninitializedValues.cpp.

Enumeration Type Documentation

◆ Value

enum Value
Enumerator
Unknown 
Initialized 
Uninitialized 
MayUninitialized 

Definition at line 102 of file UninitializedValues.cpp.

Function Documentation

◆ findVar()

static FindVarResult findVar ( const Expr E,
const DeclContext DC 
)
static

If E is an expression comprising a reference to a single variable, find that variable.

Definition at line 313 of file UninitializedValues.cpp.

References clang::C, clang::AnalysisDeclContext::getDecl(), clang::DeclContext::getParentASTContext(), isTrackedVar(), and stripCasts().

Referenced by getSelfInitExpr(), and isPointerToConst().

◆ getSelfInitExpr()

static const DeclRefExpr* getSelfInitExpr ( VarDecl VD)
static

◆ isAlwaysUninit()

static bool isAlwaysUninit ( const Value  v)
static

◆ isPointerToConst()

static bool isPointerToConst ( const QualType QT)
static

Definition at line 459 of file UninitializedValues.cpp.

References clang::UninitUse::addUninitBranch(), clang::UninitUse::Always, clang::CallExpr::arg_begin(), clang::CallExpr::arg_end(), clang::BlockDecl::captures(), clang::DeclStmt::decls(), findVar(), clang::CallExpr::getArg(), clang::AnalysisDeclContext::getASTContext(), clang::BlockExpr::getBlockDecl(), clang::CFGBlock::getBlockID(), clang::CallExpr::getCalleeDecl(), clang::CastExpr::getCastKind(), clang::AnalysisDeclContext::getDecl(), clang::DeclRefExpr::getDecl(), clang::ObjCForCollectionStmt::getElement(), clang::CFG::getEntry(), clang::UninitUse::getKind(), clang::CFGBlock::getLabel(), clang::BinaryOperator::getLHS(), clang::CFG::getNumBlockIDs(), clang::BinaryOperator::getOpcode(), clang::Type::getPointeeType(), getSelfInitExpr(), clang::DeclStmt::getSingleDecl(), clang::CastExpr::getSubExpr(), clang::Expr::getType(), Initialized, isAlwaysUninit(), clang::Type::isAnyPointerType(), clang::CallExpr::isCallToStdMove(), clang::QualType::isConstQualified(), clang::Type::isRecordType(), isTrackedVar(), isUninitialized(), Label, MayUninitialized, clang::UninitUse::Branch::Output, clang::CFGBlock::pred_begin(), clang::CFGBlock::pred_end(), clang::UninitUse::setUninitAfterCall(), clang::UninitUse::setUninitAfterDecl(), stripCasts(), clang::CFGBlock::succ_begin(), clang::CFGBlock::succ_end(), clang::CFGBlock::succ_size(), clang::UninitUse::Branch::Terminator, Uninitialized, and v.

Referenced by wasRegionOfInterestModifiedAt().

◆ isTrackedVar()

static bool isTrackedVar ( const VarDecl vd,
const DeclContext dc 
)
static

◆ isUninitialized()

static bool isUninitialized ( const Value  v)
static

Definition at line 107 of file UninitializedValues.cpp.

References Uninitialized.

Referenced by isPointerToConst().

◆ runOnBlock()

static bool runOnBlock ( const CFGBlock block,
const CFG cfg,
AnalysisDeclContext ac,
CFGBlockValues &  vals,
const ClassifyRefs &  classification,
llvm::BitVector &  wasAnalyzed,
UninitVariablesHandler handler 
)
static

◆ stripCasts()

static const Expr* stripCasts ( ASTContext C,
const Expr Ex 
)
static