clang
10.0.0git
|
#include "clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclBase.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/Stmt.h"
#include "clang/AST/Type.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "clang/Analysis/Analyses/Dominators.h"
#include "clang/Analysis/AnalysisDeclContext.h"
#include "clang/Analysis/CFG.h"
#include "clang/Analysis/CFGStmtMap.h"
#include "clang/Analysis/PathDiagnostic.h"
#include "clang/Analysis/ProgramPoint.h"
#include "clang/Basic/IdentifierTable.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Lex/Lexer.h"
#include "clang/StaticAnalyzer/Core/AnalyzerOptions.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.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 "clang/StaticAnalyzer/Core/PathSensitive/ProgramState_Fwd.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/None.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
#include <deque>
#include <memory>
#include <string>
#include <utility>
Go to the source code of this file.
Functions | |
static const Expr * | peelOffPointerArithmetic (const BinaryOperator *B) |
static bool | hasVisibleUpdate (const ExplodedNode *LeftNode, SVal LeftVal, const ExplodedNode *RightNode, SVal RightVal) |
Comparing internal representations of symbolic values (via SVal::operator==()) is a valid way to check if the value was updated, unless it's a LazyCompoundVal that may have a different internal representation every time it is loaded from the state. More... | |
static Optional< SVal > | getSValForVar (const Expr *CondVarExpr, const ExplodedNode *N) |
static Optional< const llvm::APSInt * > | getConcreteIntegerValue (const Expr *CondVarExpr, const ExplodedNode *N) |
static bool | isVarAnInterestingCondition (const Expr *CondVarExpr, const ExplodedNode *N, const PathSensitiveBugReport *B) |
static bool | isInterestingExpr (const Expr *E, const ExplodedNode *N, const PathSensitiveBugReport *B) |
static StringRef | getMacroName (SourceLocation Loc, BugReporterContext &BRC) |
static bool | isFunctionMacroExpansion (SourceLocation Loc, const SourceManager &SM) |
static bool | wasRegionOfInterestModifiedAt (const SubRegion *RegionOfInterest, const ExplodedNode *N, SVal ValueAfter) |
static bool | potentiallyWritesIntoIvar (const Decl *Parent, const ObjCIvarDecl *Ivar) |
static ArrayRef< ParmVarDecl * > | getCallParameters (CallEventRef<> Call) |
Get parameters associated with runtime definition in order to get the correct parameter name. More... | |
static bool | isPointerToConst (QualType Ty) |
static bool | isInitializationOfVar (const ExplodedNode *N, const VarRegion *VR) |
Returns true if N represents the DeclStmt declaring and initializing VR . More... | |
static void | showBRDiagnostics (const char *action, llvm::raw_svector_ostream &os, const MemRegion *R, SVal V, const DeclStmt *DS) |
Show diagnostics for initializing or declaring a region R with a bad value. More... | |
static void | showBRParamDiagnostics (llvm::raw_svector_ostream &os, const VarRegion *VR, SVal V) |
Display diagnostics for passing bad region as a parameter. More... | |
static void | showBRDefaultDiagnostics (llvm::raw_svector_ostream &os, const MemRegion *R, SVal V) |
Show default diagnostics for storing bad region. More... | |
static std::shared_ptr< PathDiagnosticEventPiece > | constructDebugPieceForTrackedCondition (const Expr *Cond, const ExplodedNode *N, BugReporterContext &BRC) |
static bool | isAssertlikeBlock (const CFGBlock *B, ASTContext &Context) |
static const MemRegion * | getLocationRegionIfReference (const Expr *E, const ExplodedNode *N) |
Variables | |
static llvm::StringLiteral | WillBeUsedForACondition |
|
static |
Definition at line 1730 of file BugReporterVisitors.cpp.
References clang::ento::PathDiagnosticLocation::createBegin(), clang::Stmt::getSourceRange(), clang::Lexer::getSourceText(), clang::CharSourceRange::getTokenRange(), and clang::PD_NONE.
|
static |
Get parameters associated with runtime definition in order to get the correct parameter name.
Definition at line 469 of file BugReporterVisitors.cpp.
Referenced by isPointerToConst().
|
static |
Definition at line 208 of file BugReporterVisitors.cpp.
References getSValForVar(), and V.
|
static |
Definition at line 1830 of file BugReporterVisitors.cpp.
References clang::ProgramPoint::getAs(), clang::CFGBlock::getTerminatorStmt(), clang::Expr::IgnoreParenCasts(), peelOffPointerArithmetic(), and clang::CFGBlock::succ_begin().
|
static |
Loc
. Definition at line 240 of file BugReporterVisitors.cpp.
References clang::Lexer::getImmediateMacroName().
Definition at line 183 of file BugReporterVisitors.cpp.
References clang::Expr::IgnoreImpCasts(), and State.
Referenced by getConcreteIntegerValue(), isInterestingExpr(), and isVarAnInterestingCondition().
|
static |
Comparing internal representations of symbolic values (via SVal::operator==()) is a valid way to check if the value was updated, unless it's a LazyCompoundVal that may have a different internal representation every time it is loaded from the state.
In this function we do an approximate comparison for lazy compound values, checking that they are the immediate snapshots of the tracked region's bindings within the node's respective states but not really checking that these snapshots actually contain the same set of bindings.
Definition at line 165 of file BugReporterVisitors.cpp.
Referenced by showBRDefaultDiagnostics().
|
static |
Definition at line 1749 of file BugReporterVisitors.cpp.
|
static |
Definition at line 250 of file BugReporterVisitors.cpp.
References clang::CharSourceRange::getBegin(), clang::SourceManager::getDecomposedLoc(), clang::SrcMgr::SLocEntry::getExpansion(), clang::SourceManager::getImmediateExpansionRange(), clang::SourceManager::getSLocEntry(), clang::SrcMgr::ExpansionInfo::isFunctionMacroExpansion(), clang::SourceManager::isMacroArgExpansion(), and clang::SourceLocation::isMacroID().
|
static |
Returns true if N
represents the DeclStmt declaring and initializing VR
.
Definition at line 1216 of file BugReporterVisitors.cpp.
References clang::DeclStmt::getSingleDecl(), clang::LocationContext::getStackFrame(), and P.
Referenced by showBRDefaultDiagnostics().
|
static |
Definition at line 232 of file BugReporterVisitors.cpp.
References getSValForVar(), and V.
Ty
points to a const type, or is a const reference. Definition at line 481 of file BugReporterVisitors.cpp.
References clang::RecordDecl::fields(), clang::Type::getAsRecordDecl(), getCallParameters(), clang::QualType::getCanonicalType(), clang::NamedDecl::getNameAsString(), clang::LocationContext::getParent(), clang::Type::getPointeeType(), clang::LocationContext::getStackFrame(), clang::ValueDecl::getType(), clang::StackFrameContext::inTopFrame(), clang::QualType::isConstQualified(), clang::QualType::isNull(), clang::Type::isReferenceType(), clang::Type::isVoidType(), P, potentiallyWritesIntoIvar(), State, V, and wasRegionOfInterestModifiedAt().
|
static |
Definition at line 216 of file BugReporterVisitors.cpp.
References getSValForVar(), and V.
|
static |
Definition at line 74 of file BugReporterVisitors.cpp.
References clang::BinaryOperator::getLHS(), clang::BinaryOperator::getRHS(), clang::Expr::getType(), clang::BinaryOperator::isAdditiveOp(), and clang::Type::isPointerType().
Referenced by getLocationRegionIfReference().
|
static |
Parent
syntactically has a binary operation writing into the ivar Ivar
. Definition at line 436 of file BugReporterVisitors.cpp.
References clang::ast_matchers::binaryOperator, clang::Decl::hasBody(), clang::ast_matchers::hasDeclaration(), clang::ast_matchers::hasDescendant, clang::ast_matchers::objcIvarRefExpr, and clang::ast_matchers::stmt.
Referenced by isPointerToConst().
|
static |
Show default diagnostics for storing bad region.
Definition at line 1316 of file BugReporterVisitors.cpp.
References clang::CallEventManager::getCaller(), hasVisibleUpdate(), clang::Expr::IgnoreParenCasts(), isInitializationOfVar(), P, and V.
|
static |
Show diagnostics for initializing or declaring a region R
with a bad value.
Definition at line 1244 of file BugReporterVisitors.cpp.
References clang::DeclStmt::getSingleDecl().
|
static |
Display diagnostics for passing bad region as a parameter.
Definition at line 1286 of file BugReporterVisitors.cpp.
|
static |
RegionOfInterest
was modified at N
, where ValueAfter
is RegionOfInterest's
value at the end of the stack frame. Definition at line 265 of file BugReporterVisitors.cpp.
References clang::LocationContext::getStackFrame(), P, SM, and State.
Referenced by isPointerToConst().
|
static |
Definition at line 654 of file BugReporterVisitors.cpp.