| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(1) libAnalysis is a generic analysis library that can be used by
Sema. It defines the CFG, basic dataflow analysis primitives, and
inexpensive flow-sensitive analyses (e.g. LiveVariables).
(2) libChecker contains the guts of the static analyzer, incuding the
path-sensitive analysis engine and domain-specific checks.
Now any clients that want to use the frontend to build their own tools
don't need to link in the entire static analyzer.
This change exposes various obvious cleanups that can be made to the
layout of files and headers in libChecker. More changes pending. :)
This change also exposed a layering violation between AnalysisContext
and MemRegion. BlockInvocationContext shouldn't explicitly know about
BlockDataRegions. For now I've removed the BlockDataRegion* from
BlockInvocationContext (removing context-sensitivity; although this
wasn't used yet). We need to have a better way to extend
BlockInvocationContext (and any LocationContext) to add
context-sensitivty.
llvm-svn: 94406
|
|
|
|
|
|
| |
messages when emitted results to the standard Diagnostics output. Fixes PR 6033.
llvm-svn: 93507
|
|
|
|
| |
llvm-svn: 93506
|
|
|
|
|
|
| |
about BlockDecls.
llvm-svn: 90584
|
|
|
|
| |
llvm-svn: 90086
|
|
|
|
| |
llvm-svn: 90028
|
|
|
|
|
|
|
|
| |
malloc() traffic when adding successors/predecessors to a node. This was done by introducing BumpVector, which is essentially SmallVector with all memory being BumpPtrAllocated (this can certainly be cleaned up or moved into llvm/ADT).
This change yields a 1.8% speed increase when running the analyzer (with -analyzer-store=region) on a small benchmark file.
llvm-svn: 83439
|
|
|
|
|
|
|
| |
r82198 and then reverted. This is an intermediate solution, as diagnostic
caching should not rely on static variables.
llvm-svn: 82301
|
|
|
|
|
|
|
|
|
|
| |
when running the analyzer on real projects. We'll keep the change to
AnalysisManager.cpp in r82198 so that -fobjc-gc analyzes code
correctly in both GC and non-GC modes, although this may emit two
diagnostics for each bug in some cases (a better solution will come
later).
llvm-svn: 82201
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
pruning of diagnostics that may be emitted multiple times. This is
accomplished by adding FoldingSet profiling support to PathDiagnostic,
and then having BugReporter record what diagnostics have been issued.
This was motived to a serious bug introduced by moving the
'divide-by-zero' checking outside of GRExprEngine into a separate
'Checker' class. When analyzing code using the '-fobjc-gc' option, a
given function would be analyzed twice, but the second time various
"internal checks" would be disabled to avoid emitting multiple
diagnostics (e.g., "null dereference") for the same issue. The
problem is that such checks also effect path pruning and don't just
emit diagnostics. This resulted in an assertion failure involving a
real divide-by-zero in some analyzed code where we would get an
assertion failure in APInt because the 'DivZero' check was disabled
and didn't prune the logic that resulted in the divide-by-zero in the
analyzer.
The implemented solution is somewhat of a hack, and may not perform
extremely well. This will need to be cleaned up over time.
As a regression test, 'misc-ps.m' has been modified so that its tests
are run using -fobjc-gc to test this diagnostic pruning behavior.
llvm-svn: 82198
|
|
|
|
| |
llvm-svn: 81825
|
|
|
|
|
|
| |
to a noreturn or panic function
llvm-svn: 81803
|
|
|
|
| |
llvm-svn: 81783
|
|
|
|
|
|
|
|
|
|
|
|
| |
to statically type various methods in SValuator/GRState as required either a
defined value or a defined-but-possibly-unknown value. This leads to various
logic cleanups in GRExprEngine, and lets the compiler enforce via type checking
our assumptions about what symbolic values are possibly undefined and what are
not.
Along the way, clean up some of the static analyzer diagnostics regarding the uses of uninitialized values.
llvm-svn: 81579
|
|
|
|
|
|
| |
local node information.
llvm-svn: 81433
|
|
|
|
| |
llvm-svn: 81346
|
|
|
|
|
|
| |
ActionGRExprEngine().
llvm-svn: 81064
|
|
|
|
|
|
|
| |
Now AnalysisManager is the only place we can get CodeDecl.
This leads to an API change: GRState::bindExpr() now takes the CFG argument.
llvm-svn: 79980
|
|
|
|
| |
llvm-svn: 79973
|
|
|
|
| |
llvm-svn: 79502
|
|
|
|
|
|
| |
and other core analysis logic will be untied to a particular Decl.
llvm-svn: 79420
|
|
|
|
| |
llvm-svn: 79328
|
|
|
|
|
|
| |
BugReporter.
llvm-svn: 79327
|
|
|
|
|
|
|
|
|
| |
which allows custom checks to register callback creator functions for creating
BugReporterVisitor objects. This allows various checks to include diagnostics
such as 'assuming value is null' with little extra work. Eventually this API
should be refactored to be cleaner and more simple.
llvm-svn: 79302
|
|
|
|
|
|
| |
merge ExplodedGraphImpl and ExplodedGraph.
llvm-svn: 78291
|
|
|
|
|
|
|
| |
and their impl base classes. This can greatly simply some code of the core
analysis engine. This patch merges ExplodedNodeImpl into ExplodedNode.
llvm-svn: 78270
|
|
|
|
| |
llvm-svn: 77447
|
|
|
|
|
|
| |
valid SourceLocation.
llvm-svn: 77280
|
|
|
|
|
|
|
|
|
|
|
|
| |
Educate GRExprEngine::VisitGraph() about 'PreStmt'.
Mark the constructor of 'PostStmt' to be explicit, preventing implicit
conversions and the selection of the wrong 'generateNode' method in
GRStmtNodeBuilder.
Constify a bunch of arguments, which falls out of the changes to ProgramPoint.
llvm-svn: 76809
|
|
|
|
| |
llvm-svn: 76092
|
|
|
|
|
|
|
|
| |
subclasses.
Timings showed no significant difference before and after the commit.
llvm-svn: 74504
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GRTransferFuncs had the conflated role of both constructing SVals (symbolic
expressions) as well as handling checker-specific logic. Now SValuator has the
role of constructing SVals from expressions and GRTransferFuncs just handles
checker-specific logic. The motivation is by separating these two concepts we
will be able to much more easily create richer constraint-generating logic
without coupling it to the main checker transfer function logic.
We now have one implementation of SValuator: SimpleSValuator.
SimpleSValuator is essentially the SVal-related logic that was in GRSimpleVals
(which is removed in this patch). This includes the logic for EvalBinOp,
EvalCast, etc. Because SValuator has a narrower role than the old
GRTransferFuncs, the interfaces are much simpler, and so is the implementation
of SimpleSValuator compared to GRSimpleVals. I also did a line-by-line review of
SVal-related logic in GRSimpleVals and cleaned it up while moving it over to
SimpleSValuator.
As a consequence of removing GRSimpleVals, there is no longer a
'-checker-simple' option. The '-checker-cfref' did everything that option did
but also ran the retain/release checker. Of course a user may not always wish to
run the retain/release checker, nor do we wish core analysis logic buried in the
checker-specific logic. The next step is to refactor the logic in CFRefCount.cpp
to separate out these pieces into the core analysis engine.
llvm-svn: 74229
|
|
|
|
| |
llvm-svn: 73968
|
|
|
|
|
|
| |
GRState->bindXXX and friends (and constify some arguments along the way).
llvm-svn: 73740
|
|
|
|
|
|
| |
report in a bug equivalence class with the shortest path.
llvm-svn: 71920
|
|
|
|
| |
llvm-svn: 71832
|
|
|
|
|
|
|
| |
loop body when generating 'Looping back to the head of the loop'
diagnostics.
llvm-svn: 71829
|
|
|
|
|
|
| |
PathDiagnosticEventPiece if the BugReport contained no explicit ranges.
llvm-svn: 71516
|
|
|
|
|
|
| |
context when they are used as initialization code for loops.
llvm-svn: 71480
|
|
|
|
|
|
| |
constructor for a single point, not a range.
llvm-svn: 71477
|
|
|
|
|
|
| |
canonicalization locations and use this in both popLocation and rawAddEdge.
llvm-svn: 71470
|
|
|
|
|
|
|
|
| |
- Improve -autorelease diagnostics.
- Improve VLA diagnostics.
- Use "short description" for bug when outputting to TextDiagnostics
llvm-svn: 71383
|
|
|
|
| |
llvm-svn: 71135
|
|
|
|
|
|
|
|
|
|
|
| |
'BugReporterVisitor'. This simplifies callbacks from BugReporter to BugReports
(via VisitNode). It also lays the foundation for arbitrary visitor "call backs"
that can be registered to a BugReporterContext as a PathDiagnostic is
constructed. These call backs can help operate as separate "experts" that can
work on constructed pieces of a PathDiagnostic for which they possess special
knowledge.
llvm-svn: 71121
|
|
|
|
|
|
| |
start of 'do' and '@synchronized' statements.
llvm-svn: 71038
|
|
|
|
|
|
|
| |
about Exprs that are not consumed and fix where the loop iteration diagnostic
goes.
llvm-svn: 71027
|
|
|
|
|
|
| |
control-flow expressions as dead.
llvm-svn: 70887
|
|
|
|
|
|
|
|
| |
location context. This allows us to postpone the decision of whether
or not a context should add a control-flow piece to the diagnostics
when inspecting its subexpressions.
llvm-svn: 70545
|
|
|
|
| |
llvm-svn: 70542
|
|
|
|
| |
llvm-svn: 70417
|