| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 46604
|
|
|
|
|
|
|
|
|
|
| |
(local) aliasing support.
Modified ExplodedGraph pretty-printer (for GRConstants) to also print out the
pointer value of the state associated with a node. This way one can easily
see that two states are identical.
llvm-svn: 46595
|
|
|
|
|
|
|
| |
Improved pretty-printing of LValues.
Parameters whose values are pointers/references are now assigned SymbolicLValues.
llvm-svn: 46584
|
|
|
|
|
|
|
| |
worklist until the dstor of GRBranchNodeBuilderImpl. This way clients can mark
creates nodes as "sinks" before they are added to the worklist.
llvm-svn: 46582
|
|
|
|
|
|
| |
constant integers.
llvm-svn: 46581
|
|
|
|
|
|
| |
more cleanups with pretty-printing of analysis results.
llvm-svn: 46564
|
|
|
|
|
|
|
| |
we automatically generate a new successor node along an edge if the checker
did not explicitly do so (i.e., we just propagate the current state).
llvm-svn: 46536
|
|
|
|
| |
llvm-svn: 46535
|
|
|
|
| |
llvm-svn: 46532
|
|
|
|
| |
llvm-svn: 46531
|
|
|
|
|
|
| |
have been 'true'.
llvm-svn: 46530
|
|
|
|
|
|
|
| |
Made some internal API cleanups with creating ConcreteInt values, which lead to
some code reduction in implementing "++", "--".
llvm-svn: 46528
|
|
|
|
|
|
|
|
| |
for analyzing a function.
The initial state for GRConstants now assigns symbolic values to parameters.
llvm-svn: 46517
|
|
|
|
|
|
| |
state.
llvm-svn: 46491
|
|
|
|
|
|
|
|
|
| |
and now we require a FunctionDecl* object so that we can also keep track of
all of the ParmDecls.
Modified clients of LiveVariables to conform to the new interface.
llvm-svn: 46490
|
|
|
|
| |
llvm-svn: 46477
|
|
|
|
|
|
|
| |
Refactoring: for GREngine and GRConstants, pushed references to CFG, ASTContext,
and the top-level FunctionDecl into ExplodedGraphImpl.
llvm-svn: 46475
|
|
|
|
| |
llvm-svn: 46471
|
|
|
|
| |
llvm-svn: 46470
|
|
|
|
| |
llvm-svn: 46468
|
|
|
|
|
|
|
|
| |
now SymbolicNonLValue.
Cleaned up some casts.
llvm-svn: 46467
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Renamed ExprValue to RValue, as all expression values are RValues, and this
keeps with the C terminology (renamed old "RValue" class to "NonLValue").
Introduced "ConcreteInt", a class that represents a concrete, integer
constant as an RValue.
Temporarily removed classes to represent set of possible constants and set of !=
constants. Will replace with a more general class representing a set of
constraints.
Added some foundational code to track "symbolic" values, which are used to
accrue constraints on an abstract value that is shared between multiple
variables. e.g:
x = y; // at this point "x" and "y" share the same "value"
if (x > 1)
... // at this point, the value shared by "x" and "y" is "> 1".
llvm-svn: 46466
|
|
|
|
|
|
|
|
|
|
|
|
| |
(http://llvm.org/viewvc/llvm-project?rev=46361&view=rev) with the addition of
some previously missing NULL pointer checks.
Modified the UninitializedValues analysis to not expect that every Expr* at the
block-level is a block-level expression (we probably need to change the name of
such expressions to something truer to their meaning).
llvm-svn: 46380
|
|
|
|
| |
llvm-svn: 46379
|
|
|
|
|
|
| |
a template-template parameter.
llvm-svn: 46378
|
|
|
|
|
|
|
|
|
| |
Renamed RValueConjunctiveUnequal to RValInequalityANDSet.
Refactored add/subtract/multiple (and now divide) operations for
RValEqualityORSet to be based on a single template function.
llvm-svn: 46374
|
|
|
|
| |
llvm-svn: 46370
|
|
|
|
| |
llvm-svn: 46368
|
|
|
|
|
|
|
|
|
|
| |
information is not separated into a "base" and "sub" type. Eventually the
value-tracking logic will know about LValues and RValues, but not about
specialized LValues and RValues; separating the "kind" information into bits
indicating whether an ExprValue is an LValue or an RValue from the bits that
specify the actual value type makes this separation easier.
llvm-svn: 46329
|
|
|
|
| |
llvm-svn: 46327
|
|
|
|
| |
llvm-svn: 46326
|
|
|
|
| |
llvm-svn: 46323
|
|
|
|
|
|
|
| |
a Stmt* is a block-level expression when we INSERT a value into the map, and
not also when we QUERY a value.
llvm-svn: 46321
|
|
|
|
|
|
| |
the value map as if the expressions were non-block-level expressions.
llvm-svn: 46319
|
|
|
|
|
|
|
| |
we falsely constructed an APInt to represent the constant '1' instead of
using an APSInt (which has a sign).
llvm-svn: 46317
|
|
|
|
|
|
|
|
| |
Added some workarounds for loss of signess information on some APSInt
operations. Considering the best route to integrate these into APSInt directly.
(FIXME's in GRConstants.cpp).
llvm-svn: 46310
|
|
|
|
| |
llvm-svn: 46300
|
|
|
|
|
|
| |
Added initial support for integer casting operations to GRConstants.
llvm-svn: 46298
|
|
|
|
| |
llvm-svn: 46294
|
|
|
|
|
|
| |
Added "multiplication" support for equality sets.
llvm-svn: 46289
|
|
|
|
| |
llvm-svn: 46288
|
|
|
|
|
|
| |
causing problems with Dot.
llvm-svn: 46285
|
|
|
|
| |
llvm-svn: 46284
|
|
|
|
|
|
|
|
|
| |
abstract "L-values" and "R-values" when doing value tracking, and expanding
constant tracking to encompass tracking disjunctive sets of possible constants.
Further, the tree-walking is more efficient, as we don't blindly recurse the
tree if we won't generate new states.
llvm-svn: 46278
|
|
|
|
|
|
|
|
|
| |
use ImmutableMap::SlimFind(), which returns the correct value.
Added pruning of dead block-level expressions and Decls from our value map
using liveness information.
llvm-svn: 46154
|
|
|
|
|
|
|
| |
dead at an assignment without taking into account if the variable was used in
the RHS of the assignment.
llvm-svn: 46153
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
is because GNU-style Statement-expressions cause the last statement in the
statement-expression to act like an expression.
We now have two notions: block-level statements and block-level expressions.
The former are all Stmt* that appear in the list of statements in CFGBlocks. The
latter is the subset of the former; these block-level statements are used as
subexpressions somewhere in the AST. CFG::isBlockExpr() returns true for the
latter, not the former (previously isBlockExpr() always returned true for
non-Expr Stmt*).
Modified the LiveVariables analysis to also track liveness state for block-level
expressions (using the updated definition of block-level expressions).
Modified the dataflow solver so that when it records values for block-level
statements, it records the dataflow value *before* the transfer function for a
Stmt* is evaluated (not after). This is more in sync in what clients will want.
Modified CFGStmtVisitor to record the current block-level statement.
llvm-svn: 46143
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
values for the block-level expressions.
Modified 'LiveVariables' to provide the option to clients to record
liveness information for block-level expressions (using the above feature).
Modified 'DeadStores' to conform to the new interface of 'LiveVariables'.
Modified 'GRConstants' to compute liveness information for block-level
expressions.
llvm-svn: 46137
|
|
|
|
| |
llvm-svn: 46133
|
|
|
|
|
|
|
| |
Refactored the use of this method into both the Sema module and Analysis module,
which were using their own static functions that did the same thing.
llvm-svn: 46129
|