clang
9.0.0svn
|
#include "clang/Analysis/Analyses/ReachableCode.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/ParentMap.h"
#include "clang/AST/StmtCXX.h"
#include "clang/Analysis/AnalysisDeclContext.h"
#include "clang/Analysis/CFG.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Lex/Preprocessor.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/SmallVector.h"
Go to the source code of this file.
Namespaces | |
clang | |
Dataflow Directional Tag Classes. | |
clang::reachable_code | |
Functions | |
static bool | isEnumConstant (const Expr *Ex) |
static bool | isTrivialExpression (const Expr *Ex) |
static bool | isTrivialDoWhile (const CFGBlock *B, const Stmt *S) |
static bool | isBuiltinUnreachable (const Stmt *S) |
static bool | isBuiltinAssumeFalse (const CFGBlock *B, const Stmt *S, ASTContext &C) |
static bool | isDeadReturn (const CFGBlock *B, const Stmt *S) |
static SourceLocation | getTopMostMacro (SourceLocation Loc, SourceManager &SM) |
static bool | isExpandedFromConfigurationMacro (const Stmt *S, Preprocessor &PP, bool IgnoreYES_NO=false) |
Returns true if the statement is expanded from a configuration macro. More... | |
static bool | isConfigurationValue (const ValueDecl *D, Preprocessor &PP) |
static bool | isConfigurationValue (const Stmt *S, Preprocessor &PP, SourceRange *SilenceableCondVal=nullptr, bool IncludeIntegers=true, bool WrappedInParens=false) |
Returns true if the statement represents a configuration value. More... | |
static bool | shouldTreatSuccessorsAsReachable (const CFGBlock *B, Preprocessor &PP) |
Returns true if we should always explore all successors of a block. More... | |
static unsigned | scanFromBlock (const CFGBlock *Start, llvm::BitVector &Reachable, Preprocessor *PP, bool IncludeSometimesUnreachableEdges) |
static unsigned | scanMaybeReachableFromBlock (const CFGBlock *Start, Preprocessor &PP, llvm::BitVector &Reachable) |
static bool | isValidDeadStmt (const Stmt *S) |
static int | SrcCmp (const std::pair< const CFGBlock *, const Stmt *> *p1, const std::pair< const CFGBlock *, const Stmt *> *p2) |
static SourceLocation | GetUnreachableLoc (const Stmt *S, SourceRange &R1, SourceRange &R2) |
unsigned | clang::reachable_code::ScanReachableFromBlock (const CFGBlock *Start, llvm::BitVector &Reachable) |
ScanReachableFromBlock - Mark all blocks reachable from Start. More... | |
void | clang::reachable_code::FindUnreachableCode (AnalysisDeclContext &AC, Preprocessor &PP, Callback &CB) |
|
static |
Definition at line 137 of file ReachableCode.cpp.
References clang::SourceManager::getImmediateMacroCallerLoc(), clang::SourceLocation::isMacroID(), and clang::Last.
|
static |
Definition at line 546 of file ReachableCode.cpp.
|
static |
Definition at line 68 of file ReachableCode.cpp.
Referenced by clang::CallExpr::setRParenLoc().
Definition at line 60 of file ReachableCode.cpp.
|
static |
Definition at line 271 of file ReachableCode.cpp.
Referenced by shouldTreatSuccessorsAsReachable().
|
static |
Returns true if the statement represents a configuration value.
A configuration value is something usually determined at compile-time to conditionally always execute some branch. Such guards are for "sometimes unreachable" code. Such code is usually not interesting to report as unreachable, and may mask truly unreachable code within those blocks.
Definition at line 187 of file ReachableCode.cpp.
Definition at line 83 of file ReachableCode.cpp.
Definition at line 33 of file ReachableCode.cpp.
References clang::DeclRefExpr::getDecl().
Referenced by isTrivialExpression().
|
static |
Returns true if the statement is expanded from a configuration macro.
Definition at line 148 of file ReachableCode.cpp.
Definition at line 48 of file ReachableCode.cpp.
Definition at line 40 of file ReachableCode.cpp.
References clang::Expr::IgnoreParenCasts(), and isEnumConstant().
Definition at line 448 of file ReachableCode.cpp.
|
static |
Definition at line 308 of file ReachableCode.cpp.
References clang::CFGBlock::getBlockID(), shouldTreatSuccessorsAsReachable(), clang::CFGBlock::succ_begin(), and clang::CFGBlock::succ_end().
Referenced by scanMaybeReachableFromBlock(), and clang::reachable_code::ScanReachableFromBlock().
|
static |
Definition at line 374 of file ReachableCode.cpp.
References clang::C, and scanFromBlock().
Referenced by clang::reachable_code::FindUnreachableCode().
|
static |
Returns true if we should always explore all successors of a block.
Definition at line 293 of file ReachableCode.cpp.
References clang::CFGBlock::getTerminator(), clang::CFGBlock::getTerminatorCondition(), and isConfigurationValue().
Referenced by scanFromBlock().
|
static |
Definition at line 475 of file ReachableCode.cpp.
References clang::CFGBlock::getBlockID().