clang 22.0.0git
|
Visitor that tries to report interesting diagnostics from conditions. More...
#include "clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h"
Static Public Member Functions | |
static const char * | getTag () |
Return the tag associated with this visitor. | |
static bool | isPieceMessageGeneric (const PathDiagnosticPiece *Piece) |
Static Public Member Functions inherited from clang::ento::BugReporterVisitor | |
static PathDiagnosticPieceRef | getDefaultEndPath (const BugReporterContext &BRC, const ExplodedNode *N, const PathSensitiveBugReport &BR) |
Generates the default final diagnostic piece. |
Visitor that tries to report interesting diagnostics from conditions.
Definition at line 447 of file BugReporterVisitors.h.
|
static |
Return the tag associated with this visitor.
This tag will be used to make all PathDiagnosticPieces created by this visitor.
Definition at line 2719 of file BugReporterVisitors.cpp.
Referenced by eventsDescribeSameCondition(), and VisitNode().
|
static |
Definition at line 3260 of file BugReporterVisitors.cpp.
References clang::ento::PathDiagnosticPiece::getString().
Referenced by eventsDescribeSameCondition().
bool ConditionBRVisitor::patternMatch | ( | const Expr * | Ex, |
const Expr * | ParentEx, | ||
raw_ostream & | Out, | ||
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | R, | ||
const ExplodedNode * | N, | ||
std::optional< bool > & | prunable, | ||
bool | IsSameFieldName ) |
Definition at line 2914 of file BugReporterVisitors.cpp.
References clang::cast(), clang::Lexer::getAsCharRange(), clang::ento::SVal::getAsRegion(), clang::ento::BugReporterContext::getASTContext(), clang::Stmt::getBeginLoc(), clang::Stmt::getEndLoc(), clang::ASTContext::getLangOpts(), clang::ento::ExplodedNode::getLocationContext(), clang::ento::ProgramState::getLValue(), clang::ento::BugReporterContext::getSourceManager(), clang::Stmt::getSourceRange(), clang::Lexer::getSourceText(), clang::ento::ExplodedNode::getState(), clang::ento::ProgramState::getSVal(), clang::CharSourceRange::getTokenRange(), clang::Expr::getType(), clang::Expr::IgnoreParenCasts(), clang::isa(), clang::Lexer::isAtEndOfMacroExpansion(), clang::Lexer::isAtStartOfMacroExpansion(), clang::ento::PathSensitiveBugReport::isInteresting(), clang::SourceLocation::isMacroID(), clang::Type::isObjCObjectPointerType(), clang::Type::isPointerType(), SM, and V.
Referenced by VisitTrueTest().
bool ConditionBRVisitor::printValue | ( | const Expr * | CondVarExpr, |
raw_ostream & | Out, | ||
const ExplodedNode * | N, | ||
bool | TookTrue, | ||
bool | IsAssuming ) |
Tries to print the value of the given expression.
CondVarExpr | The expression to print its value. |
Out | The stream to print. |
N | The node where we encountered the condition. |
TookTrue | Whether we took the true branch of the condition. |
Definition at line 3220 of file BugReporterVisitors.cpp.
References getConcreteIntegerValue(), clang::Expr::getType(), clang::Type::isBooleanType(), clang::Type::isIntegralOrEnumerationType(), clang::Type::isObjCObjectPointerType(), and clang::Type::isPointerType().
Referenced by VisitConditionVariable(), VisitTrueTest(), and VisitTrueTest().
|
inlineoverridevirtual |
Implements clang::ento::BugReporterVisitor.
Definition at line 455 of file BugReporterVisitors.h.
PathDiagnosticPieceRef ConditionBRVisitor::VisitConditionVariable | ( | StringRef | LhsString, |
const Expr * | CondVarExpr, | ||
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | R, | ||
const ExplodedNode * | N, | ||
bool | TookTrue ) |
Definition at line 3119 of file BugReporterVisitors.cpp.
References clang::ento::ExplodedNode::getLocationContext(), clang::ento::BugReporterContext::getSourceManager(), isInterestingExpr(), isVarAnInterestingCondition(), printValue(), and WillBeUsedForACondition.
Referenced by VisitTrueTest().
|
overridevirtual |
Return a diagnostic piece which should be associated with the given node.
Note that this function does not get run on the very last node of the report, as the PathDiagnosticPiece associated with the last node should be unique. Use getEndPath to customize the note associated with the report end instead.
The last parameter can be used to register a new visitor with the given BugReport while processing a node.
Implements clang::ento::BugReporterVisitor.
Definition at line 2722 of file BugReporterVisitors.cpp.
References getTag(), and VisitNodeImpl().
PathDiagnosticPieceRef ConditionBRVisitor::VisitNodeImpl | ( | const ExplodedNode * | N, |
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | BR ) |
Definition at line 2734 of file BugReporterVisitors.cpp.
References clang::cast(), clang::ProgramPoint::getAs(), clang::ento::ExprEngine::getEagerlyAssumeBifurcationTags(), clang::ento::ExplodedNode::getFirstPred(), clang::ento::ExplodedNode::getLocation(), clang::ProgramPoint::getTag(), clang::CFGBlock::getTerminatorStmt(), VisitTerminator(), and VisitTrueTest().
Referenced by VisitNode().
PathDiagnosticPieceRef ConditionBRVisitor::VisitTerminator | ( | const Stmt * | Term, |
const ExplodedNode * | N, | ||
const CFGBlock * | SrcBlk, | ||
const CFGBlock * | DstBlk, | ||
PathSensitiveBugReport & | R, | ||
BugReporterContext & | BRC ) |
Definition at line 2772 of file BugReporterVisitors.cpp.
References clang::cast(), clang::Cond, clang::Stmt::getStmtClass(), clang::CFGBlock::succ_begin(), clang::CFGBlock::succ_size(), and VisitTrueTest().
Referenced by VisitNodeImpl().
PathDiagnosticPieceRef ConditionBRVisitor::VisitTrueTest | ( | const Expr * | Cond, |
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | R, | ||
const ExplodedNode * | N, | ||
bool | TookTrue ) |
Definition at line 2836 of file BugReporterVisitors.cpp.
References clang::cast(), clang::Cond, clang::ento::ExplodedNode::getFirstPred(), clang::ento::ExplodedNode::getLocationContext(), clang::ento::BugReporterContext::getSourceManager(), clang::ento::ExplodedNode::getState(), clang::ento::BugReporterContext::getStateManager(), clang::Stmt::getStmtClass(), clang::ento::ProgramStateManager::haveEqualConstraints(), clang::Expr::IgnoreParenCasts(), clang::ento::DefinedSVal::isValid(), and VisitTrueTest().
Referenced by VisitNodeImpl(), VisitTerminator(), and VisitTrueTest().
PathDiagnosticPieceRef ConditionBRVisitor::VisitTrueTest | ( | const Expr * | Cond, |
const BinaryOperator * | BExpr, | ||
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | R, | ||
const ExplodedNode * | N, | ||
bool | TookTrue, | ||
bool | IsAssuming ) |
Definition at line 2999 of file BugReporterVisitors.cpp.
References clang::Cond, clang::BinaryOperator::getLHS(), clang::ento::ExplodedNode::getLocationContext(), clang::BinaryOperator::getOpcode(), clang::BinaryOperator::getOpcodeStr(), clang::BinaryOperator::getRHS(), clang::ento::BugReporterContext::getSourceManager(), clang::Expr::IgnoreParenCasts(), clang::BinaryOperator::isAssignmentOp(), clang::BinaryOperator::isComparisonOp(), isVarAnInterestingCondition(), patternMatch(), SM, VisitConditionVariable(), and WillBeUsedForACondition.
PathDiagnosticPieceRef ConditionBRVisitor::VisitTrueTest | ( | const Expr * | Cond, |
const DeclRefExpr * | DR, | ||
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | R, | ||
const ExplodedNode * | N, | ||
bool | TookTrue, | ||
bool | IsAssuming ) |
Definition at line 3146 of file BugReporterVisitors.cpp.
References clang::Cond, clang::DeclRefExpr::getDecl(), clang::ento::ExplodedNode::getLocationContext(), clang::ento::BugReporterContext::getSourceManager(), isInterestingExpr(), isVarAnInterestingCondition(), printValue(), and WillBeUsedForACondition.
PathDiagnosticPieceRef ConditionBRVisitor::VisitTrueTest | ( | const Expr * | Cond, |
const MemberExpr * | ME, | ||
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | R, | ||
const ExplodedNode * | N, | ||
bool | TookTrue, | ||
bool | IsAssuming ) |
Definition at line 3182 of file BugReporterVisitors.cpp.
References clang::Cond, clang::ento::ExplodedNode::getLocationContext(), clang::MemberExpr::getMemberDecl(), clang::MemberExpr::getMemberLoc(), clang::NamedDecl::getName(), clang::ento::BugReporterContext::getSourceManager(), isInterestingExpr(), clang::ento::DefinedSVal::isValid(), clang::SourceLocation::isValid(), isVarAnInterestingCondition(), printValue(), and WillBeUsedForACondition.