| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
| |
we don't need to use the DoneEvaluation hack when check for
ObjCMessageExpr.
PreVisitObjCMessageExpr() only checks for undefined receiver or arguments.
Add checker interface EvalNilReceiver(). This is a 'once-and-done' interface.
llvm-svn: 90296
|
| |
|
|
| |
llvm-svn: 90139
|
| |
|
|
| |
llvm-svn: 90137
|
| |
|
|
| |
llvm-svn: 90028
|
| |
|
|
|
|
|
|
|
|
|
| |
'BlockDataRegion' to distinguish between the code associated with a
block (which is represented by 'BlockTextRegion') and an instance of a
block, which includes both code and data. 'BlockDataRegion' has an
associated LocationContext, which can be used to eventually model the
lifetime of a block object once LocationContexts can represent scopes
(and iterations around a loop, etc.).
llvm-svn: 89900
|
| |
|
|
| |
llvm-svn: 89890
|
| |
|
|
|
|
| |
by making it a static function within GRExprEngine.cpp.
llvm-svn: 89884
|
| |
|
|
|
|
| |
manually in AnalysisConsumer.cpp.
llvm-svn: 89883
|
| |
|
|
|
|
|
|
|
| |
only stop processing the checkers after all the nodes for a current
check have been processed. This (I believe) handles the case where
PredSet (the input nodes) contains more than one node due to state
bifurcation. Zhongxing: can you review this?
llvm-svn: 89882
|
| |
|
|
| |
llvm-svn: 89829
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
initial transition of the nil-receiver checker to the Checker
interface as done in r89745. Some important changes include:
1) We consolidate the BugType object used for nil receiver bug
reports, and don't include the type of the returned value in the
BugType (which would be wrong if a nil receiver bug was reported more
than once)
2) Added a new (temporary) flag to CheckerContext: DoneEvauating.
This is used by GRExprEngine when evaluating message expressions to
not continue evaluating the message expression if this flag is set.
This flag is currently set by the nil receiver checker. This is an
intermediate solution to allow the nil-receiver checker to properly
work as a plug-in outside of GRExprEngine. Basically, this flag
indicates that the entire message expression has been evaluated, not
just a precondition (which is what the nil-receiver checker does).
This flag *should not* be repurposed for general use, but just to pull
more things out of GRExprEngine that already in there as we devise a
better interface in the Checker class.
3) Cleaned up the logic in the nil-receiver checker, making the
control-flow a lot easier to read.
llvm-svn: 89804
|
| |
|
|
| |
llvm-svn: 89750
|
| |
|
|
|
|
| |
CallAndMessageChecker.
llvm-svn: 89745
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
along the way. Important changes:
1) To generate a sink node, use GenerateSink(); GenerateNode() is for
generating regular transitions. This makes the API clearer and also
allows us to use the 'bool' option to GenerateNode() for a different
purpose.
2) GenerateNode() now automatically adds the generated node to the
destination ExplodedNodeSet (autotransition) unless the client
specifies otherwise with a bool flag. Several checkers did not call
'addTransition()' after calling 'GenerateNode()', causing the
simulation path to be prematurely culled when a non-fail stop bug was
encountered.
3) Add variants of GenerateNode()/GenerateSink() that take neither a
Stmt* or a GRState*; most callers of GenerateNode() just pass in the
same Stmt* as provided when the CheckerContext object is created; we
can just use that the majority of the time. This cleanup also allows
us to potentially coelesce the APIs for evaluating branches and
end-of-paths (which currently directly use builders).
4) addTransition() no longer needs to be called except for a few
cases. We now have a variant of addTransition() that takes a
GRState*; this allows one to propagate the updated state without
caring about generating a new node explicitly. This nicely cleaned up
a bunch of cases that called autoTransition() with a bunch of
conditional logic surround the call (that common logic has now been
swallowed up by addTransition() itself).
llvm-svn: 89707
|
| |
|
|
|
|
| |
in the checker directly. But I don't have a better approach for now.
llvm-svn: 89640
|
| |
|
|
|
|
| |
UndefinedAssignmentChecker. So this check is redundant.
llvm-svn: 89592
|
| |
|
|
|
|
| |
undefined.
llvm-svn: 89591
|
| |
|
|
|
|
| |
also handled undefined receivers in message expressions.
llvm-svn: 89524
|
| |
|
|
|
|
| |
is now handled by UndefinedArgChecker.
llvm-svn: 89519
|
| |
|
|
| |
llvm-svn: 89446
|
| |
|
|
| |
llvm-svn: 89437
|
| |
|
|
| |
llvm-svn: 89383
|
| |
|
|
|
|
| |
end of the path. Need to unify interfaces.
llvm-svn: 89063
|
| |
|
|
| |
llvm-svn: 89060
|
| |
|
|
|
|
|
|
|
|
| |
* Add a load type to GRExprEngine::EvalLoad().
* When retrieve from 'theValue' of OSAtomic funcitions, use the type of the
region instead of the argument expression as the load type.
* Then we can convert CastRetrievedSVal to a pure assertion. In the future
we can let all Retrieve() methods simply return SVal.
llvm-svn: 88888
|
| |
|
|
| |
llvm-svn: 88882
|
| |
|
|
| |
llvm-svn: 88729
|
| |
|
|
| |
llvm-svn: 87092
|
| |
|
|
| |
llvm-svn: 87091
|
| |
|
|
|
|
| |
CallExprs. No clients (yet).
llvm-svn: 86949
|
| |
|
|
|
|
| |
and was easily inlined.
llvm-svn: 86948
|
| |
|
|
|
|
| |
overflow logic in GRExprEngineInternalChecks.cpp.
llvm-svn: 86877
|
| |
|
|
| |
llvm-svn: 86837
|
| |
|
|
| |
llvm-svn: 86836
|
| |
|
|
|
|
|
|
|
|
| |
the old builder API. This percolated a bunch of changes up to the
Checker class (where CheckLocation has been renamed VisitLocation) and
GRExprEngine. ProgramPoint now has the notion of a "LocationCheck"
point (with PreLoad and PreStore respectively), and a bunch of the old
ProgramPoints that are no longer used have been removed.
llvm-svn: 86798
|
| |
|
|
|
|
| |
Patch by Victor Zverovich!
llvm-svn: 86638
|
| |
|
|
| |
llvm-svn: 86595
|
| |
|
|
| |
llvm-svn: 86529
|
| |
|
|
|
|
| |
CheckerVisitor::PreVisitDeclStmt()), and refactor VLASizeChecker to have only one Checker subclass (not two) and to not use the node builders directly (and instead use the newer CheckerContext).
llvm-svn: 86329
|
| |
|
|
|
|
|
|
|
| |
stack variable or a garbage
value into their own respective subclasses of Checker (and put them in .cpp files where their
implementation details are hidden from GRExprEngine).
llvm-svn: 86215
|
| |
|
|
|
|
|
|
| |
an "assign expression", representing the expressions where the value
binding occurs and the assignment takes place respectively. These are
largely syntactic clues for better error reporting.
llvm-svn: 86084
|
| |
|
|
|
|
| |
catching such bugs closer to the source.
llvm-svn: 86003
|
| |
|
|
|
|
| |
VarDecl*, and modify GRExprEngine::EvalBind() to handle decl initialization as well. This paves the way for adding "checker" visitation in EvalBind().
llvm-svn: 85983
|
| |
|
|
|
|
| |
a BugReporter&. This paves the way for pulling some of the retain/release checker into a "Checker" class.
llvm-svn: 85971
|
| |
|
|
|
|
|
|
| |
Split it to two checkers, one for undefined size,
the other for zero size, so that we don't need to query the size
when emitting the bug report.
llvm-svn: 85895
|
| |
|
|
|
|
| |
release] in GC mode
llvm-svn: 85887
|
| |
|
|
|
|
| |
place, so we inlined it in to GRExprEngine::EvalLocation().
llvm-svn: 85838
|
| |
|
|
| |
llvm-svn: 85618
|
| |
|
|
| |
llvm-svn: 85597
|
| |
|
|
|
|
|
| |
can get the correct base lvalue.
Revert r85578.
llvm-svn: 85579
|