clang
15.0.0git
|
#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/Builtins.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 | |
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 136 of file ReachableCode.cpp.
References clang::SourceLocation::isMacroID(), clang::Last, and SM.
|
static |
Definition at line 544 of file ReachableCode.cpp.
|
static |
Definition at line 69 of file ReachableCode.cpp.
Definition at line 61 of file ReachableCode.cpp.
|
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 186 of file ReachableCode.cpp.
|
static |
Definition at line 271 of file ReachableCode.cpp.
Referenced by shouldTreatSuccessorsAsReachable().
Definition at line 84 of file ReachableCode.cpp.
Definition at line 34 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 147 of file ReachableCode.cpp.
Definition at line 49 of file ReachableCode.cpp.
Definition at line 41 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 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::getTerminatorCondition(), clang::CFGBlock::getTerminatorStmt(), and isConfigurationValue().
Referenced by scanFromBlock().