Commit Graph

30 Commits

Author SHA1 Message Date
Ted Kremenek eb653882de Return "Unknown" when using the value of a function pointer whose value
is symbolic.

llvm-svn: 47463
2008-02-21 23:17:39 +00:00
Ted Kremenek e82c7a44d6 RemoveDeadBindings should now check for UninitalizedVal, as it is a now
an error to cast it to LVal.

llvm-svn: 47450
2008-02-21 19:30:14 +00:00
Ted Kremenek 7f0639b039 Major cleanup of path-sensitive analysis engine and the current analysis
based on constant. prop. and limited symbolics.

- Renamed class: RValue -> RVal, LValue -> LVal, etc.
- Minor method renamings and interface cleanups.
- Tightened the RVal "type system" so that UninitializedVal and UnknownVal
  cannot be cast to LVal or NonLVal.  This forces these corner cases values
  to be explicitly handled early before being dispatched to plug-in transfer
  function logic.
- Major cleanup in the transfer function logic for binary and unary operators.
  Still fixing some regressions, but we now explicitly handle Uninitialized
  and Unknown values in a more rigorous way.

llvm-svn: 47441
2008-02-21 18:02:17 +00:00
Ted Kremenek b597bb9c4a Placed transfer function logic for dereferences in its own method, while at
the same time clearing up some logic of how the unary '*' operator is processed.

llvm-svn: 47356
2008-02-20 04:02:35 +00:00
Ted Kremenek fe0b5740ce Added transfer function support for casting to "void".
llvm-svn: 47333
2008-02-19 18:47:04 +00:00
Ted Kremenek 8b51dc2754 Added back explicit state/node creation when visiting IntegerLiterals and
CharacterLiterals.  This may not be a permanent solution; it doesn't cost that
much, however, to create a few additional states, and solves a whole bunch
of edge cases when handling ?, ||, and &&.

llvm-svn: 47299
2008-02-19 02:01:16 +00:00
Ted Kremenek e0188e6ad7 Added boilerplate transfer function support for CallExprs.
llvm-svn: 47298
2008-02-19 01:44:53 +00:00
Ted Kremenek 0f7130adc4 --grsimple now reports the number of nodes in the ExplodedGraph for
an analyzed function.

GRExprEngine now records stores to "uninitialized lvalues" (which are sinks in
the ExplodedGraph).

llvm-svn: 47293
2008-02-19 00:22:37 +00:00
Ted Kremenek 346169fa3d Added more assertions and checks in transfer function logic to check for
UninitializedVals and UnknownVals.

llvm-svn: 47288
2008-02-18 22:57:02 +00:00
Ted Kremenek e81734b01c Simplified transfer function logic for ++/-- operators.
Added more boilerplate transfer function support for pointer arithmetic.
Added more pretty-printing support for symbolic constraints.
Added transfer function support for handling enum values.
Minor pointer types cleanup in ExplodedGraphImpl.

llvm-svn: 47183
2008-02-15 22:09:30 +00:00
Ted Kremenek 8e6f6e05c3 Added "symbol iterators" for RValues, allowing easy iteration over the symbols
referenced by an RValue, instead of having to query the type of the RValue.

Modified ValueState::RemoveDeadBindings to also prune dead symbols.

llvm-svn: 47142
2008-02-14 23:25:54 +00:00
Ted Kremenek 736e441266 Added transfer function/value track logic for taking the address of a label.
llvm-svn: 47030
2008-02-12 21:37:56 +00:00
Ted Kremenek fb9cc188af Renamed local variable.
Added transfer function support for CharacterLiteral.

llvm-svn: 47014
2008-02-12 18:50:32 +00:00
Ted Kremenek 633654ffab Consolidated use of BumpPtrAllocator shared by various ImmutableSet/ImmutableMap
factories.

Fixed a horrible bug in lval:DeclVar::classof(RValue* V); we weren't checking
V was an LValue, allowing nonlval::ConcereteInts to match isa<lval::DeclVar>.

llvm-svn: 46976
2008-02-11 23:12:59 +00:00
Ted Kremenek ed3be17b6f Separate bindings for subexpressions to be in a separate map for
bindings for block-level expressions.

Moved pretty-printing logic (DOT) for ValueStates to ValueState.cpp.

llvm-svn: 46965
2008-02-11 19:21:59 +00:00
Ted Kremenek b54312d5a0 Split off expression-bindings in ValueState from variable-bindings.
llvm-svn: 46892
2008-02-08 21:10:02 +00:00
Ted Kremenek 4142cc834b Changed "GetValue" methods to take an
Expr* instead of a Stmt*, since we only
store bindings for Expr*.

llvm-svn: 46891
2008-02-08 20:29:23 +00:00
Ted Kremenek 80ff44ff30 Moved implementation of "RemoveDeadBindings" from the main
GRConstants logic to ValueStateManager.

llvm-svn: 46888
2008-02-08 19:17:19 +00:00
Ted Kremenek fd641f1056 More variable renamings.
llvm-svn: 46875
2008-02-08 03:02:48 +00:00
Ted Kremenek 173743da67 Renamed InvalidValue to UnknownVal.
Renamed UninitializedValue to UninitializedVal.

llvm-svn: 46874
2008-02-08 02:57:34 +00:00
Ted Kremenek e324704e62 Added recording of "implicit" NULL dereferences of symbolic pointers.
llvm-svn: 46843
2008-02-07 05:48:01 +00:00
Ted Kremenek 88da1de048 Added several guards in transfer functions for "InvalidValues".
Fixed bug in RemoveDeadBindings by implementing a simple "mark-and-sweep"
cleaner over the bindings, starting from the Decls and block-level expressions
that are considered "live" by the Liveness analysis.

Fixed bug in isa<> implementation for class LValue.

Added "VisitDeclRefExpr" to GRConstants so that we explicitly bind the current
value of variable to the Block-level Expression (i.e., when the DeclRefExpr is
at the CFGBlock level).

llvm-svn: 46839
2008-02-07 04:16:04 +00:00
Ted Kremenek 43523e0fe8 Added transfer function logic for ReturnStmts.
Fixed insidious bug in handling dereferences.

llvm-svn: 46835
2008-02-07 01:08:27 +00:00
Ted Kremenek 4ff4e7ce9f Fixed bug when allocating a ValueStateImpl object in getPersistentState()
using the bump-pointer allocator and a placed new; we accidentally allocated
a ValueStateImpl* instead, causing an overrun when we did a placed new().

llvm-svn: 46793
2008-02-06 02:45:20 +00:00
Ted Kremenek 03e7b55f22 Added some skeleton code for performing "assume" on symbols: e.g. assume($0 != 0).
This action will add constraints to the possible values of a symbol.
Still needs to be debugged.

llvm-svn: 46789
2008-02-06 00:54:14 +00:00
Ted Kremenek 1e3fa134de Moved subclasses of LValue and NonLValue into their own namespaces.
This noticeably cleans up the naming of these classes.

llvm-svn: 46770
2008-02-05 21:52:21 +00:00
Ted Kremenek 1cc95f6cd3 Added a "ConstantNotEq" map to ValueState (and added necessary typedefs and factory objects to ValueStateManager).
llvm-svn: 46758
2008-02-05 18:51:06 +00:00
Ted Kremenek d8902e06ba Overhauling of "ValueState" so that it represents its own functional data
structure that can contain several maps, not just one.

llvm-svn: 46744
2008-02-05 07:17:49 +00:00
Ted Kremenek 3f2f1ade4c Implemented initial transfer function support for '&&', '||', '?', and
__builtin_choose.

llvm-svn: 46731
2008-02-05 00:26:40 +00:00
Ted Kremenek 7746a6279b Added file that should have been in my previous commit.
llvm-svn: 46722
2008-02-04 21:59:22 +00:00