clang
8.0.0
|
#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/AnalysisDeclContext.h"
#include "clang/Analysis/CFG.h"
#include "clang/Analysis/CFGStmtMap.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/BugReporter/PathDiagnostic.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) |
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 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 | 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 const MemRegion * | getLocationRegionIfReference (const Expr *E, const ExplodedNode *N) |
|
static |
Definition at line 1499 of file BugReporterVisitors.cpp.
References clang::ProgramPoint::getAs(), clang::CFGBlock::getTerminator(), clang::Expr::IgnoreParenCasts(), peelOffPointerArithmetic(), and clang::CFGBlock::succ_begin().
|
static |
Loc
. Definition at line 215 of file BugReporterVisitors.cpp.
References clang::Lexer::getImmediateMacroName().
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.
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.
References clang::ento::PathDiagnosticLocation::createEndOfPath(), and P.
Referenced by showBRDefaultDiagnostics().
|
static |
Definition at line 225 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 1034 of file BugReporterVisitors.cpp.
References clang::DeclStmt::getSingleDecl(), clang::LocationContext::getStackFrame(), and P.
Referenced by showBRDefaultDiagnostics().
|
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 |
Show default diagnostics for storing bad region.
Definition at line 1134 of file BugReporterVisitors.cpp.
References clang::CallEventManager::getCaller(), hasVisibleUpdate(), clang::Expr::IgnoreParenCasts(), isInitializationOfVar(), and P.
|
static |
Show diagnostics for initializing or declaring a region R
with a bad value.
Definition at line 1062 of file BugReporterVisitors.cpp.
References clang::DeclStmt::getSingleDecl().
|
static |
Display diagnostics for passing bad region as a parameter.
Definition at line 1104 of file BugReporterVisitors.cpp.
|
static |
RegionOfInterest
was modified at N
, where ReturnState
is a state associated with the return from the current frame. Definition at line 240 of file BugReporterVisitors.cpp.
References clang::ast_matchers::binaryOperator, clang::RecordDecl::fields(), clang::Type::getAsRecordDecl(), clang::NamedDecl::getNameAsString(), clang::Type::getPointeeType(), clang::LocationContext::getStackFrame(), clang::ValueDecl::getType(), clang::Decl::hasBody(), clang::ast_matchers::hasDeclaration(), clang::ast_matchers::hasDescendant, clang::SourceManager::isInSystemHeader(), clang::QualType::isNull(), isPointerToConst(), clang::Type::isReferenceType(), clang::Type::isVoidType(), clang::ast_matchers::objcIvarRefExpr, P, Parent, SM, State, and clang::ast_matchers::stmt.