clang  4.0.0svn
Classes | Public Types | Public Member Functions | Protected Types | Protected Attributes | Friends | List of all members
clang::ento::BugReport Class Reference

This class provides an interface through which checkers can create individual bug reports. More...

#include <BugReporter.h>

Inheritance diagram for clang::ento::BugReport:
Inheritance graph
[legend]
Collaboration diagram for clang::ento::BugReport:
Collaboration graph
[legend]

Classes

class  NodeResolver
 

Public Types

typedef const SourceRangeranges_iterator
 
typedef SmallVector< std::unique_ptr< BugReporterVisitor >, 8 > VisitorList
 
typedef VisitorList::iterator visitor_iterator
 
typedef SmallVector< StringRef, 2 > ExtraTextList
 

Public Member Functions

 BugReport (BugType &bt, StringRef desc, const ExplodedNode *errornode)
 
 BugReport (BugType &bt, StringRef shortDesc, StringRef desc, const ExplodedNode *errornode)
 
 BugReport (BugType &bt, StringRef desc, PathDiagnosticLocation l)
 
 BugReport (BugType &bt, StringRef desc, const ExplodedNode *errornode, PathDiagnosticLocation LocationToUnique, const Decl *DeclToUnique)
 Create a BugReport with a custom uniqueing location. More...
 
virtual ~BugReport ()
 
const BugTypegetBugType () const
 
BugTypegetBugType ()
 
const ExplodedNodegetErrorNode () const
 
StringRef getDescription () const
 
StringRef getShortDescription (bool UseFallback=true) const
 
bool shouldPrunePath () const
 Indicates whether or not any path pruning should take place when generating a PathDiagnostic from this BugReport. More...
 
void disablePathPruning ()
 Disable all path pruning when generating a PathDiagnostic. More...
 
void markInteresting (SymbolRef sym)
 
void markInteresting (const MemRegion *R)
 
void markInteresting (SVal V)
 
void markInteresting (const LocationContext *LC)
 
bool isInteresting (SymbolRef sym)
 
bool isInteresting (const MemRegion *R)
 
bool isInteresting (SVal V)
 
bool isInteresting (const LocationContext *LC)
 
unsigned getConfigurationChangeToken () const
 
bool isValid () const
 Returns whether or not this report should be considered valid. More...
 
void markInvalid (const void *Tag, const void *Data)
 Marks the current report as invalid, meaning that it is probably a false positive and should not be reported to the user. More...
 
void removeInvalidation (const void *Tag, const void *Data)
 Reverses the effects of a previous invalidation. More...
 
const DeclgetDeclWithIssue () const
 Return the canonical declaration, be it a method or class, where this issue semantically occurred. More...
 
void setDeclWithIssue (const Decl *declWithIssue)
 Specifically set the Decl where an issue occurred. More...
 
void addExtraText (StringRef S)
 This allows for addition of meta data to the diagnostic. More...
 
virtual const ExtraTextListgetExtraText ()
 
virtual PathDiagnosticLocation getLocation (const SourceManager &SM) const
 Return the "definitive" location of the reported bug. More...
 
PathDiagnosticLocation getUniqueingLocation () const
 Get the location on which the report should be uniqued. More...
 
const DeclgetUniqueingDecl () const
 Get the declaration containing the uniqueing location. More...
 
const StmtgetStmt () const
 
void addRange (SourceRange R)
 Add a range to a bug report. More...
 
virtual llvm::iterator_range< ranges_iteratorgetRanges ()
 Get the SourceRanges associated with the report. More...
 
void addVisitor (std::unique_ptr< BugReporterVisitor > visitor)
 Add custom or predefined bug report visitors to this report. More...
 
visitor_iterator visitor_begin ()
 Iterators through the custom diagnostic visitors. More...
 
visitor_iterator visitor_end ()
 
virtual void Profile (llvm::FoldingSetNodeID &hash) const
 Profile to identify equivalent bug reports for error report coalescing. More...
 

Protected Types

typedef llvm::DenseSet< SymbolRefSymbols
 
typedef llvm::DenseSet< const MemRegion * > Regions
 
typedef std::pair< const void *, const void * > InvalidationRecord
 Used to track unique reasons why a bug report might be invalid. More...
 

Protected Attributes

BugTypeBT
 
const DeclDeclWithIssue
 
std::string ShortDescription
 
std::string Description
 
PathDiagnosticLocation Location
 
PathDiagnosticLocation UniqueingLocation
 
const DeclUniqueingDecl
 
const ExplodedNodeErrorNode
 
SmallVector< SourceRange, 4 > Ranges
 
ExtraTextList ExtraText
 
SmallVector< Symbols *, 2 > interestingSymbols
 A (stack of) a set of symbols that are registered with this report as being "interesting", and thus used to help decide which diagnostics to include when constructing the final path diagnostic. More...
 
SmallVector< Regions *, 2 > interestingRegions
 A (stack of) set of regions that are registered with this report as being "interesting", and thus used to help decide which diagnostics to include when constructing the final path diagnostic. More...
 
llvm::SmallSet< const LocationContext *, 2 > InterestingLocationContexts
 A set of location contexts that correspoind to call sites which should be considered "interesting". More...
 
VisitorList Callbacks
 A set of custom visitors which generate "event" diagnostics at interesting points in the path. More...
 
llvm::FoldingSet< BugReporterVisitorCallbacksSet
 Used for ensuring the visitors are only added once. More...
 
unsigned ConfigurationChangeToken
 Used for clients to tell if the report's configuration has changed since the last time they checked. More...
 
bool DoNotPrunePath
 When set, this flag disables all callstack pruning from a diagnostic path. More...
 
llvm::SmallSet< InvalidationRecord, 4 > Invalidations
 If non-empty, this bug report is likely a false positive and should not be shown to the user. More...
 

Friends

class BugReporter
 
class BugReportEquivClass
 

Detailed Description

This class provides an interface through which checkers can create individual bug reports.

Definition at line 55 of file BugReporter.h.

Member Typedef Documentation

Definition at line 68 of file BugReporter.h.

typedef std::pair<const void *, const void *> clang::ento::BugReport::InvalidationRecord
protected

Used to track unique reasons why a bug report might be invalid.

See also
markInvalid
removeInvalidation

Definition at line 127 of file BugReporter.h.

Definition at line 65 of file BugReporter.h.

Definition at line 87 of file BugReporter.h.

Definition at line 86 of file BugReporter.h.

typedef VisitorList::iterator clang::ento::BugReport::visitor_iterator

Definition at line 67 of file BugReporter.h.

Definition at line 66 of file BugReporter.h.

Constructor & Destructor Documentation

clang::ento::BugReport::BugReport ( BugType bt,
StringRef  desc,
const ExplodedNode errornode 
)
inline

Definition at line 146 of file BugReporter.h.

clang::ento::BugReport::BugReport ( BugType bt,
StringRef  shortDesc,
StringRef  desc,
const ExplodedNode errornode 
)
inline

Definition at line 150 of file BugReporter.h.

clang::ento::BugReport::BugReport ( BugType bt,
StringRef  desc,
PathDiagnosticLocation  l 
)
inline

Definition at line 156 of file BugReporter.h.

clang::ento::BugReport::BugReport ( BugType bt,
StringRef  desc,
const ExplodedNode errornode,
PathDiagnosticLocation  LocationToUnique,
const Decl DeclToUnique 
)
inline

Create a BugReport with a custom uniqueing location.

The reports that have the same report location, description, bug type, and ranges are uniqued - only one of the equivalent reports will be presented to the user. This method allows to rest the location which should be used for uniquing reports. For example, memory leaks checker, could set this to the allocation site, rather then the location where the bug is reported.

Definition at line 167 of file BugReporter.h.

References ~BugReport().

BugReport::~BugReport ( )
virtual

Definition at line 2551 of file BugReporter.cpp.

Referenced by BugReport().

Member Function Documentation

void clang::ento::BugReport::addExtraText ( StringRef  S)
inline

This allows for addition of meta data to the diagnostic.

Currently, only the HTMLDiagnosticClient knows how to display it.

Definition at line 252 of file BugReporter.h.

void clang::ento::BugReport::addRange ( SourceRange  R)
inline

Add a range to a bug report.

Ranges are used to highlight regions of interest in the source code. They should be at the same source code line as the BugReport location. By default, the source range of the statement corresponding to the error node will be used; add a single invalid range to specify absence of ranges.

Definition at line 286 of file BugReporter.h.

References addVisitor(), getRanges(), and clang::SourceRange::isValid().

void BugReport::addVisitor ( std::unique_ptr< BugReporterVisitor visitor)

Add custom or predefined bug report visitors to this report.

The visitors should be used when the default trace is not sufficient. For example, they allow constructing a more elaborate trace.

See also
registerConditionVisitor(), registerTrackNullOrUndefValue(), registerFindLastStore(), registerNilReceiverVisitor(), and registerVarDeclsLastStore().

Definition at line 2535 of file BugReporter.cpp.

Referenced by addRange(), clang::ento::BugReporterVisitor::getDefaultEndPath(), clang::ento::FindLastStoreBRVisitor::registerStatementVarDecls(), clang::ento::bugreporter::trackNullOrUndefValue(), and clang::ento::FindLastStoreBRVisitor::VisitNode().

void clang::ento::BugReport::disablePathPruning ( )
inline

Disable all path pruning when generating a PathDiagnostic.

Definition at line 195 of file BugReporter.h.

References isInteresting(), and markInteresting().

const BugType& clang::ento::BugReport::getBugType ( ) const
inline

Definition at line 177 of file BugReporter.h.

References BT.

Referenced by FindReportInEquivalenceClass().

BugType& clang::ento::BugReport::getBugType ( )
inline

Definition at line 178 of file BugReporter.h.

References BT.

unsigned clang::ento::BugReport::getConfigurationChangeToken ( ) const
inline

Definition at line 207 of file BugReporter.h.

References ConfigurationChangeToken.

const Decl * BugReport::getDeclWithIssue ( ) const

Return the canonical declaration, be it a method or class, where this issue semantically occurred.

Definition at line 2557 of file BugReporter.cpp.

References clang::LocationContext::getCurrentStackFrame(), clang::LocationContext::getDecl(), and clang::ento::ExplodedNode::getLocationContext().

Referenced by FindReportInEquivalenceClass(), and removeInvalidation().

StringRef clang::ento::BugReport::getDescription ( ) const
inline
const ExplodedNode* clang::ento::BugReport::getErrorNode ( ) const
inline
virtual const ExtraTextList& clang::ento::BugReport::getExtraText ( )
inlinevirtual

Definition at line 256 of file BugReporter.h.

References ExtraText, getLocation(), and SM.

Referenced by FindReportInEquivalenceClass().

PathDiagnosticLocation BugReport::getLocation ( const SourceManager SM) const
virtual

Return the "definitive" location of the reported bug.

While a bug can span an entire path, usually there is a specific location that can be used to identify where the key issue occurred. This location is used by clients rendering diagnostics.

Definition at line 2718 of file BugReporter.cpp.

References clang::ento::PathDiagnosticLocation::createEndOfPath().

Referenced by FindReportInEquivalenceClass(), clang::ento::LikelyFalsePositiveSuppressionBRVisitor::getEndPath(), and getExtraText().

llvm::iterator_range< BugReport::ranges_iterator > BugReport::getRanges ( )
virtual

Get the SourceRanges associated with the report.

Definition at line 2701 of file BugReporter.cpp.

Referenced by addRange(), FindReportInEquivalenceClass(), clang::ento::BugReporterVisitor::getDefaultEndPath(), and getStopTrackingHardEquivalent().

StringRef clang::ento::BugReport::getShortDescription ( bool  UseFallback = true) const
inline

Definition at line 184 of file BugReporter.h.

References ShortDescription.

Referenced by FindReportInEquivalenceClass().

const Stmt * BugReport::getStmt ( ) const
const Decl* clang::ento::BugReport::getUniqueingDecl ( ) const
inline

Get the declaration containing the uniqueing location.

Definition at line 273 of file BugReporter.h.

References getStmt(), and UniqueingDecl.

Referenced by FindReportInEquivalenceClass().

PathDiagnosticLocation clang::ento::BugReport::getUniqueingLocation ( ) const
inline

Get the location on which the report should be uniqued.

Definition at line 268 of file BugReporter.h.

References UniqueingLocation.

Referenced by FindReportInEquivalenceClass().

bool BugReport::isInteresting ( SymbolRef  sym)
bool BugReport::isInteresting ( const MemRegion R)

Definition at line 2638 of file BugReporter.cpp.

References clang::ento::MemRegion::getBaseRegion().

bool BugReport::isInteresting ( SVal  V)
bool BugReport::isInteresting ( const LocationContext LC)

Definition at line 2650 of file BugReporter.cpp.

bool clang::ento::BugReport::isValid ( ) const
inline

Returns whether or not this report should be considered valid.

Invalid reports are those that have been classified as likely false positives after the fact.

Definition at line 215 of file BugReporter.h.

Referenced by GenerateAlternateExtensivePathDiagnostic(), and GenerateVisitorsOnlyPathDiagnostic().

void BugReport::markInteresting ( SymbolRef  sym)
void BugReport::markInteresting ( const MemRegion R)

Definition at line 2602 of file BugReporter.cpp.

References clang::ento::MemRegion::getBaseRegion().

void BugReport::markInteresting ( SVal  V)
void BugReport::markInteresting ( const LocationContext LC)

Definition at line 2620 of file BugReporter.cpp.

void clang::ento::BugReport::markInvalid ( const void *  Tag,
const void *  Data 
)
inline

Marks the current report as invalid, meaning that it is probably a false positive and should not be reported to the user.

The Tag and Data arguments are intended to be opaque identifiers for this particular invalidation, where Tag represents the visitor responsible for invalidation, and Data represents the reason this visitor decided to invalidate the bug report.

See also
removeInvalidation

Definition at line 228 of file BugReporter.h.

Referenced by clang::ento::BugReporterVisitor::getDefaultEndPath(), clang::ento::LikelyFalsePositiveSuppressionBRVisitor::getEndPath(), and clang::ento::SuppressInlineDefensiveChecksVisitor::VisitNode().

void BugReport::Profile ( llvm::FoldingSetNodeID &  hash) const
virtual

Profile to identify equivalent bug reports for error report coalescing.

Reports are uniqued to ensure that we do not emit multiple diagnostics for each bug.

Definition at line 2569 of file BugReporter.cpp.

References GetCurrentOrPreviousStmt(), clang::ento::PathDiagnosticLocation::isValid(), and clang::ento::PathDiagnosticLocation::Profile().

Referenced by visitor_end().

void clang::ento::BugReport::removeInvalidation ( const void *  Tag,
const void *  Data 
)
inline

Reverses the effects of a previous invalidation.

See also
markInvalid

Definition at line 235 of file BugReporter.h.

References getDeclWithIssue().

Referenced by clang::ento::BugReporterVisitor::getDefaultEndPath().

void clang::ento::BugReport::setDeclWithIssue ( const Decl declWithIssue)
inline

Specifically set the Decl where an issue occurred.

This isn't necessary for BugReports that cover a path as it will be automatically inferred.

Definition at line 245 of file BugReporter.h.

bool clang::ento::BugReport::shouldPrunePath ( ) const
inline

Indicates whether or not any path pruning should take place when generating a PathDiagnostic from this BugReport.

Definition at line 192 of file BugReporter.h.

References DoNotPrunePath.

visitor_iterator clang::ento::BugReport::visitor_begin ( )
inline

Iterators through the custom diagnostic visitors.

Definition at line 305 of file BugReporter.h.

visitor_iterator clang::ento::BugReport::visitor_end ( )
inline

Definition at line 306 of file BugReporter.h.

References Profile().

Friends And Related Function Documentation

friend class BugReportEquivClass
friend

Definition at line 72 of file BugReporter.h.

friend class BugReporter
friend

Definition at line 71 of file BugReporter.h.

Member Data Documentation

BugType& clang::ento::BugReport::BT
protected

Definition at line 74 of file BugReporter.h.

Referenced by clang::ento::BugReporter::generatePathDiagnostic(), and getBugType().

VisitorList clang::ento::BugReport::Callbacks
protected

A set of custom visitors which generate "event" diagnostics at interesting points in the path.

Definition at line 109 of file BugReporter.h.

llvm::FoldingSet<BugReporterVisitor> clang::ento::BugReport::CallbacksSet
protected

Used for ensuring the visitors are only added once.

Definition at line 112 of file BugReporter.h.

unsigned clang::ento::BugReport::ConfigurationChangeToken
protected

Used for clients to tell if the report's configuration has changed since the last time they checked.

Definition at line 116 of file BugReporter.h.

Referenced by getConfigurationChangeToken().

const Decl* clang::ento::BugReport::DeclWithIssue
protected

Definition at line 75 of file BugReporter.h.

Referenced by clang::ento::BugReporter::generatePathDiagnostic().

std::string clang::ento::BugReport::Description
protected

Definition at line 77 of file BugReporter.h.

Referenced by getDescription().

bool clang::ento::BugReport::DoNotPrunePath
protected

When set, this flag disables all callstack pruning from a diagnostic path.

This is useful for some reports that want maximum fidelty when reporting an issue.

Definition at line 121 of file BugReporter.h.

Referenced by shouldPrunePath().

const ExplodedNode* clang::ento::BugReport::ErrorNode
protected

Definition at line 82 of file BugReporter.h.

Referenced by getErrorNode().

ExtraTextList clang::ento::BugReport::ExtraText
protected

Definition at line 84 of file BugReporter.h.

Referenced by getExtraText().

llvm::SmallSet<const LocationContext *, 2> clang::ento::BugReport::InterestingLocationContexts
protected

A set of location contexts that correspoind to call sites which should be considered "interesting".

Definition at line 105 of file BugReporter.h.

SmallVector<Regions *, 2> clang::ento::BugReport::interestingRegions
protected

A (stack of) set of regions that are registered with this report as being "interesting", and thus used to help decide which diagnostics to include when constructing the final path diagnostic.

The stack is largely used by BugReporter when generating PathDiagnostics for multiple PathDiagnosticConsumers.

Definition at line 101 of file BugReporter.h.

SmallVector<Symbols *, 2> clang::ento::BugReport::interestingSymbols
protected

A (stack of) a set of symbols that are registered with this report as being "interesting", and thus used to help decide which diagnostics to include when constructing the final path diagnostic.

The stack is largely used by BugReporter when generating PathDiagnostics for multiple PathDiagnosticConsumers.

Definition at line 94 of file BugReporter.h.

llvm::SmallSet<InvalidationRecord, 4> clang::ento::BugReport::Invalidations
protected

If non-empty, this bug report is likely a false positive and should not be shown to the user.

See also
markInvalid
removeInvalidation

Definition at line 134 of file BugReporter.h.

PathDiagnosticLocation clang::ento::BugReport::Location
protected

Definition at line 78 of file BugReporter.h.

SmallVector<SourceRange, 4> clang::ento::BugReport::Ranges
protected

Definition at line 83 of file BugReporter.h.

Referenced by clang::ento::BugReporter::generatePathDiagnostic().

std::string clang::ento::BugReport::ShortDescription
protected

Definition at line 76 of file BugReporter.h.

Referenced by getShortDescription().

const Decl* clang::ento::BugReport::UniqueingDecl
protected

Definition at line 80 of file BugReporter.h.

Referenced by getUniqueingDecl().

PathDiagnosticLocation clang::ento::BugReport::UniqueingLocation
protected

Definition at line 79 of file BugReporter.h.

Referenced by getUniqueingLocation().


The documentation for this class was generated from the following files: