clang 17.0.0git
|
Visitor that tries to report interesting diagnostics from conditions. More...
#include "clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h"
Public Member Functions | |
void | Profile (llvm::FoldingSetNodeID &ID) const override |
PathDiagnosticPieceRef | VisitNode (const ExplodedNode *N, BugReporterContext &BRC, PathSensitiveBugReport &BR) override |
Return a diagnostic piece which should be associated with the given node. | |
PathDiagnosticPieceRef | VisitNodeImpl (const ExplodedNode *N, BugReporterContext &BRC, PathSensitiveBugReport &BR) |
PathDiagnosticPieceRef | VisitTerminator (const Stmt *Term, const ExplodedNode *N, const CFGBlock *SrcBlk, const CFGBlock *DstBlk, PathSensitiveBugReport &R, BugReporterContext &BRC) |
PathDiagnosticPieceRef | VisitTrueTest (const Expr *Cond, BugReporterContext &BRC, PathSensitiveBugReport &R, const ExplodedNode *N, bool TookTrue) |
PathDiagnosticPieceRef | VisitTrueTest (const Expr *Cond, const DeclRefExpr *DR, BugReporterContext &BRC, PathSensitiveBugReport &R, const ExplodedNode *N, bool TookTrue, bool IsAssuming) |
PathDiagnosticPieceRef | VisitTrueTest (const Expr *Cond, const BinaryOperator *BExpr, BugReporterContext &BRC, PathSensitiveBugReport &R, const ExplodedNode *N, bool TookTrue, bool IsAssuming) |
PathDiagnosticPieceRef | VisitTrueTest (const Expr *Cond, const MemberExpr *ME, BugReporterContext &BRC, PathSensitiveBugReport &R, const ExplodedNode *N, bool TookTrue, bool IsAssuming) |
PathDiagnosticPieceRef | VisitConditionVariable (StringRef LhsString, const Expr *CondVarExpr, BugReporterContext &BRC, PathSensitiveBugReport &R, const ExplodedNode *N, bool TookTrue) |
bool | printValue (const Expr *CondVarExpr, raw_ostream &Out, const ExplodedNode *N, bool TookTrue, bool IsAssuming) |
Tries to print the value of the given expression. | |
bool | patternMatch (const Expr *Ex, const Expr *ParentEx, raw_ostream &Out, BugReporterContext &BRC, PathSensitiveBugReport &R, const ExplodedNode *N, std::optional< bool > &prunable, bool IsSameFieldName) |
![]() | |
BugReporterVisitor ()=default | |
BugReporterVisitor (const BugReporterVisitor &)=default | |
BugReporterVisitor (BugReporterVisitor &&) | |
BugReporterVisitor & | operator= (const BugReporterVisitor &)=delete |
BugReporterVisitor & | operator= (BugReporterVisitor &&)=delete |
virtual | ~BugReporterVisitor () |
virtual PathDiagnosticPieceRef | VisitNode (const ExplodedNode *Succ, BugReporterContext &BRC, PathSensitiveBugReport &BR)=0 |
Return a diagnostic piece which should be associated with the given node. | |
virtual void | finalizeVisitor (BugReporterContext &BRC, const ExplodedNode *EndPathNode, PathSensitiveBugReport &BR) |
Last function called on the visitor, no further calls to VisitNode would follow. | |
virtual PathDiagnosticPieceRef | getEndPath (BugReporterContext &BRC, const ExplodedNode *N, PathSensitiveBugReport &BR) |
Provide custom definition for the final diagnostic piece on the path - the piece, which is displayed before the path is expanded. | |
virtual void | Profile (llvm::FoldingSetNodeID &ID) const =0 |
Static Public Member Functions | |
static const char * | getTag () |
Return the tag associated with this visitor. | |
static bool | isPieceMessageGeneric (const PathDiagnosticPiece *Piece) |
![]() | |
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 443 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 2745 of file BugReporterVisitors.cpp.
Referenced by eventsDescribeSameCondition().
|
static |
Definition at line 3271 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 2925 of file BugReporterVisitors.cpp.
References 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.
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 3231 of file BugReporterVisitors.cpp.
References getConcreteIntegerValue(), clang::Expr::getType(), clang::Type::isBooleanType(), clang::Type::isIntegralOrEnumerationType(), clang::Type::isObjCObjectPointerType(), and clang::Type::isPointerType().
|
inlineoverridevirtual |
Implements clang::ento::BugReporterVisitor.
Definition at line 451 of file BugReporterVisitors.h.
PathDiagnosticPieceRef ConditionBRVisitor::VisitConditionVariable | ( | StringRef | LhsString, |
const Expr * | CondVarExpr, | ||
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | R, | ||
const ExplodedNode * | N, | ||
bool | TookTrue | ||
) |
Definition at line 3130 of file BugReporterVisitors.cpp.
References clang::ento::ExplodedNode::getLocationContext(), clang::ento::BugReporterContext::getSourceManager(), isInterestingExpr(), isVarAnInterestingCondition(), and WillBeUsedForACondition.
|
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 2748 of file BugReporterVisitors.cpp.
PathDiagnosticPieceRef ConditionBRVisitor::VisitNodeImpl | ( | const ExplodedNode * | N, |
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | BR | ||
) |
Definition at line 2760 of file BugReporterVisitors.cpp.
References clang::ProgramPoint::getAs(), clang::ento::ExprEngine::geteagerlyAssumeBinOpBifurcationTags(), clang::ento::ExplodedNode::getFirstPred(), clang::ento::ExplodedNode::getLocation(), clang::ProgramPoint::getTag(), and clang::CFGBlock::getTerminatorStmt().
PathDiagnosticPieceRef ConditionBRVisitor::VisitTerminator | ( | const Stmt * | Term, |
const ExplodedNode * | N, | ||
const CFGBlock * | SrcBlk, | ||
const CFGBlock * | DstBlk, | ||
PathSensitiveBugReport & | R, | ||
BugReporterContext & | BRC | ||
) |
Definition at line 2798 of file BugReporterVisitors.cpp.
References clang::Stmt::getStmtClass(), clang::Expr::IgnoreParens(), clang::CFGBlock::succ_begin(), and clang::CFGBlock::succ_size().
PathDiagnosticPieceRef ConditionBRVisitor::VisitTrueTest | ( | const Expr * | Cond, |
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | R, | ||
const ExplodedNode * | N, | ||
bool | TookTrue | ||
) |
Definition at line 2857 of file BugReporterVisitors.cpp.
References 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 P.
PathDiagnosticPieceRef ConditionBRVisitor::VisitTrueTest | ( | const Expr * | Cond, |
const BinaryOperator * | BExpr, | ||
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | R, | ||
const ExplodedNode * | N, | ||
bool | TookTrue, | ||
bool | IsAssuming | ||
) |
Definition at line 3010 of file BugReporterVisitors.cpp.
References 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(), SM, and WillBeUsedForACondition.
PathDiagnosticPieceRef ConditionBRVisitor::VisitTrueTest | ( | const Expr * | Cond, |
const DeclRefExpr * | DR, | ||
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | R, | ||
const ExplodedNode * | N, | ||
bool | TookTrue, | ||
bool | IsAssuming | ||
) |
PathDiagnosticPieceRef ConditionBRVisitor::VisitTrueTest | ( | const Expr * | Cond, |
const MemberExpr * | ME, | ||
BugReporterContext & | BRC, | ||
PathSensitiveBugReport & | R, | ||
const ExplodedNode * | N, | ||
bool | TookTrue, | ||
bool | IsAssuming | ||
) |
Definition at line 3193 of file BugReporterVisitors.cpp.
References clang::ento::ExplodedNode::getLocationContext(), clang::MemberExpr::getMemberDecl(), clang::MemberExpr::getMemberLoc(), clang::NamedDecl::getName(), clang::ento::BugReporterContext::getSourceManager(), isInterestingExpr(), clang::SourceLocation::isValid(), clang::ento::DefinedSVal::isValid(), isVarAnInterestingCondition(), and WillBeUsedForACondition.