clang
3.9.0
|
Visitor that tries to report interesting diagnostics from conditions. More...
#include <BugReporterVisitor.h>
Public Member Functions | |
void | Profile (llvm::FoldingSetNodeID &ID) const override |
PathDiagnosticPiece * | VisitNode (const ExplodedNode *N, const ExplodedNode *Prev, BugReporterContext &BRC, BugReport &BR) override |
Return a diagnostic piece which should be associated with the given node. More... | |
PathDiagnosticPiece * | VisitNodeImpl (const ExplodedNode *N, const ExplodedNode *Prev, BugReporterContext &BRC, BugReport &BR) |
PathDiagnosticPiece * | VisitTerminator (const Stmt *Term, const ExplodedNode *N, const CFGBlock *srcBlk, const CFGBlock *dstBlk, BugReport &R, BugReporterContext &BRC) |
PathDiagnosticPiece * | VisitTrueTest (const Expr *Cond, bool tookTrue, BugReporterContext &BRC, BugReport &R, const ExplodedNode *N) |
PathDiagnosticPiece * | VisitTrueTest (const Expr *Cond, const DeclRefExpr *DR, const bool tookTrue, BugReporterContext &BRC, BugReport &R, const ExplodedNode *N) |
PathDiagnosticPiece * | VisitTrueTest (const Expr *Cond, const BinaryOperator *BExpr, const bool tookTrue, BugReporterContext &BRC, BugReport &R, const ExplodedNode *N) |
PathDiagnosticPiece * | VisitConditionVariable (StringRef LhsString, const Expr *CondVarExpr, const bool tookTrue, BugReporterContext &BRC, BugReport &R, const ExplodedNode *N) |
bool | patternMatch (const Expr *Ex, raw_ostream &Out, BugReporterContext &BRC, BugReport &R, const ExplodedNode *N, Optional< bool > &prunable) |
![]() | |
BugReporterVisitor ()=default | |
BugReporterVisitor (const BugReporterVisitor &)=default | |
BugReporterVisitor (BugReporterVisitor &&) | |
virtual | ~BugReporterVisitor () |
virtual std::unique_ptr < PathDiagnosticPiece > | getEndPath (BugReporterContext &BRC, const ExplodedNode *N, BugReport &BR) |
Provide custom definition for the final diagnostic piece on the path - the piece, which is displayed before the path is expanded. More... | |
Static Public Member Functions | |
static const char * | getTag () |
Return the tag associated with this visitor. More... | |
![]() | |
static std::unique_ptr < PathDiagnosticPiece > | getDefaultEndPath (BugReporterContext &BRC, const ExplodedNode *N, BugReport &BR) |
Generates the default final diagnostic piece. More... | |
Visitor that tries to report interesting diagnostics from conditions.
Definition at line 186 of file BugReporterVisitor.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 1202 of file BugReporterVisitors.cpp.
Referenced by eventsDescribeSameCondition(), and VisitNode().
bool ConditionBRVisitor::patternMatch | ( | const Expr * | Ex, |
raw_ostream & | Out, | ||
BugReporterContext & | BRC, | ||
BugReport & | R, | ||
const ExplodedNode * | N, | ||
Optional< bool > & | prunable | ||
) |
Definition at line 1324 of file BugReporterVisitors.cpp.
References clang::ento::SVal::getAsRegion(), clang::ento::ExplodedNode::getLocationContext(), clang::ento::ProgramState::getLValue(), clang::ento::ExplodedNode::getState(), clang::ento::ProgramState::getSVal(), clang::Expr::getType(), clang::Expr::IgnoreParenCasts(), clang::ento::BugReport::isInteresting(), clang::Type::isObjCObjectPointerType(), clang::Type::isPointerType(), and clang::CodeGen::state.
Referenced by VisitTrueTest().
|
inlineoverridevirtual |
Implements clang::ento::BugReporterVisitor.
Definition at line 189 of file BugReporterVisitor.h.
PathDiagnosticPiece * ConditionBRVisitor::VisitConditionVariable | ( | StringRef | LhsString, |
const Expr * | CondVarExpr, | ||
const bool | tookTrue, | ||
BugReporterContext & | BRC, | ||
BugReport & | R, | ||
const ExplodedNode * | N | ||
) |
Definition at line 1465 of file BugReporterVisitors.cpp.
References clang::ento::SVal::getAsRegion(), clang::ento::ExplodedNode::getLocationContext(), clang::ento::ProgramState::getLValue(), clang::ento::BugReporterContext::getSourceManager(), clang::ento::ExplodedNode::getState(), clang::Expr::getType(), clang::Type::isBooleanType(), clang::Type::isIntegralOrEnumerationType(), clang::ento::BugReport::isInteresting(), clang::Type::isObjCObjectPointerType(), clang::Type::isPointerType(), and clang::CodeGen::state.
Referenced by VisitTrueTest().
|
overridevirtual |
Return a diagnostic piece which should be associated with the given node.
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 1206 of file BugReporterVisitors.cpp.
References getTag(), clang::ento::PathDiagnosticPiece::setTag(), and VisitNodeImpl().
PathDiagnosticPiece * ConditionBRVisitor::VisitNodeImpl | ( | const ExplodedNode * | N, |
const ExplodedNode * | Prev, | ||
BugReporterContext & | BRC, | ||
BugReport & | BR | ||
) |
Definition at line 1219 of file BugReporterVisitors.cpp.
References clang::ProgramPoint::getAs(), clang::ento::BugReporterContext::getBugReporter(), clang::ento::ExplodedNode::getLocation(), clang::ento::ExplodedNode::getState(), clang::CFGBlock::getTerminator(), VisitTerminator(), and VisitTrueTest().
Referenced by VisitNode().
PathDiagnosticPiece * ConditionBRVisitor::VisitTerminator | ( | const Stmt * | Term, |
const ExplodedNode * | N, | ||
const CFGBlock * | srcBlk, | ||
const CFGBlock * | dstBlk, | ||
BugReport & | R, | ||
BugReporterContext & | BRC | ||
) |
Definition at line 1266 of file BugReporterVisitors.cpp.
References clang::CFGBlock::succ_begin(), clang::CFGBlock::succ_size(), and VisitTrueTest().
Referenced by VisitNodeImpl().
PathDiagnosticPiece * ConditionBRVisitor::VisitTrueTest | ( | const Expr * | Cond, |
bool | tookTrue, | ||
BugReporterContext & | BRC, | ||
BugReport & | R, | ||
const ExplodedNode * | N | ||
) |
Definition at line 1292 of file BugReporterVisitors.cpp.
References clang::UnaryOperator::getOpcode(), clang::UnaryOperator::getSubExpr(), and clang::Expr::IgnoreParenCasts().
Referenced by VisitNodeImpl(), and VisitTerminator().
PathDiagnosticPiece * ConditionBRVisitor::VisitTrueTest | ( | const Expr * | Cond, |
const DeclRefExpr * | DR, | ||
const bool | tookTrue, | ||
BugReporterContext & | BRC, | ||
BugReport & | R, | ||
const ExplodedNode * | N | ||
) |
Definition at line 1510 of file BugReporterVisitors.cpp.
References clang::DeclRefExpr::getDecl(), clang::NamedDecl::getDeclName(), clang::ento::ExplodedNode::getLocationContext(), clang::ento::BugReporterContext::getSourceManager(), clang::ento::ExplodedNode::getState(), clang::ValueDecl::getType(), clang::ento::BugReport::isInteresting(), clang::Type::isObjCObjectPointerType(), clang::Type::isPointerType(), clang::Type::isScalarType(), and clang::CodeGen::state.
PathDiagnosticPiece * ConditionBRVisitor::VisitTrueTest | ( | const Expr * | Cond, |
const BinaryOperator * | BExpr, | ||
const bool | tookTrue, | ||
BugReporterContext & | BRC, | ||
BugReport & | R, | ||
const ExplodedNode * | N | ||
) |
Definition at line 1379 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::BinaryOperator::isAssignmentOp(), clang::BinaryOperator::isComparisonOp(), patternMatch(), clang::ento::PathDiagnosticEventPiece::setPrunable(), and VisitConditionVariable().