aboutsummaryrefslogtreecommitdiff
path: root/Analysis/ValueState.cpp
AgeCommit message (Collapse)Author
2008-03-15Make a major restructuring of the clang tree: introduce a top-levelChris Lattner
lib dir and move all the libraries into it. This follows the main llvm tree, and allows the libraries to be built in parallel. The top level now enforces that all the libs are built before Driver, but we don't care what order the libs are built in. This speeds up parallel builds, particularly incremental ones. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48402 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-15Fixed 80 col. violations.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48400 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-15Disable creation of "ContentsOf" symbols. It was fundamentally broken on manyTed Kremenek
levels; eventually we will need a plug-in model (similar to GRTransferFuncs) to represent symbolic memory. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48399 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-11Expanded ValueState pretty-printing to use an optional "CheckerStatePrinter"Ted Kremenek
object to pretty-print the component of a state that is specific to a checker. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48237 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-11Added main skeleton for CFRetain transfer function logic.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48214 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-09Bug fix: Don't call RemoveDeadBindings more than once (can kill newly ↵Ted Kremenek
generated values to Block-Level Expressions). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48079 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-07Renamed ValueManager to BasicValueFactory.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48025 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-06fix typosGabor Greif
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47995 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-05remove the source location arguments to various target query methods.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47954 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-04Implemented "print" method for ValueState.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47894 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-28Merged ValueState and ValueStateImpl into just ValueState, with ↵Ted Kremenek
GRExprEngine::StateTy just becoming ValueState*. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47714 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-28Renamed "Uninitialized" -> "Undefined" in path-sensitive value tracking engine.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47713 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-27When analyzing a function, eagerly create symbolic values for allTed Kremenek
globals/parameters at the beginning of the analysis. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47664 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-27Header file cleanups: reduce number of includes; move ValueState.h into ↵Ted Kremenek
include directory tree. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47661 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-26Fix bug when processing '?' operator: invalidate the old "Uninitialized" ↵Ted Kremenek
value of the block-level expression for ?. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47645 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-26Removed hack with toggling the signedness flag of the APSInt storedTed Kremenek
in an EnumConstantDecl. This was made possible because of a recent fix in the parser: http://llvm.org/viewvc/llvm-project?rev=47581&view=rev git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47624 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-26Small fixes to shore up overhauling of transfer function logic for '&&' and '||.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47620 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-26optimization: no longer create ExplodedNodes for IntegerLiteral andTed Kremenek
CharacterLiteral expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47617 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-26Major cleanup of the transfer function logic for '&&', '||', and '?'. WeTed Kremenek
now store in the state essentially which branch we took. This removes a bunch of bogus assumptions (and likely bugs), reduces the complexity of the implementation, and facilitates more optimizations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47613 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-26Added lazy "symbolication" of parameter variables and global variables.Ted Kremenek
Added recording of divide-by-zero and divide-by-uninitialized nodes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47586 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-25Fixed bug in RemoveDeadBindings when performing the mark-and-sweep over theTed Kremenek
symbolic store: VarDecl's inserted into the sweep may not always bind to anything; handle this special case just like bindings to uninitialized values. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47550 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-25Added hack to transfer function logic to handle the case where a DeclRefExprTed Kremenek
wrapping an EnumConstantDecl evaluates to an integer type that has a different signedness than the APSInt stored in the EnumConstantDecl. Will file a Bugzilla report. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47548 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-21Return "Unknown" when using the value of a function pointer whose valueTed Kremenek
is symbolic. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47463 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-21RemoveDeadBindings should now check for UninitalizedVal, as it is a nowTed Kremenek
an error to cast it to LVal. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47450 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-21Major cleanup of path-sensitive analysis engine and the current analysisTed Kremenek
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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47441 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-20Placed transfer function logic for dereferences in its own method, while atTed Kremenek
the same time clearing up some logic of how the unary '*' operator is processed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47356 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-19Added transfer function support for casting to "void".Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47333 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-19Added back explicit state/node creation when visiting IntegerLiterals andTed Kremenek
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 &&. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47299 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-19Added boilerplate transfer function support for CallExprs.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47298 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-19--grsimple now reports the number of nodes in the ExplodedGraph forTed Kremenek
an analyzed function. GRExprEngine now records stores to "uninitialized lvalues" (which are sinks in the ExplodedGraph). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47293 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18Added more assertions and checks in transfer function logic to check forTed Kremenek
UninitializedVals and UnknownVals. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47288 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-15Simplified transfer function logic for ++/-- operators.Ted Kremenek
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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47183 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-14Added "symbol iterators" for RValues, allowing easy iteration over the symbolsTed Kremenek
referenced by an RValue, instead of having to query the type of the RValue. Modified ValueState::RemoveDeadBindings to also prune dead symbols. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47142 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-12Added transfer function/value track logic for taking the address of a label.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47030 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-12Renamed local variable.Ted Kremenek
Added transfer function support for CharacterLiteral. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47014 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-11Consolidated use of BumpPtrAllocator shared by various ImmutableSet/ImmutableMapTed Kremenek
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>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46976 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-11Separate bindings for subexpressions to be in a separate map forTed Kremenek
bindings for block-level expressions. Moved pretty-printing logic (DOT) for ValueStates to ValueState.cpp. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46965 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-08Split off expression-bindings in ValueState from variable-bindings.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46892 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-08Changed "GetValue" methods to take anTed Kremenek
Expr* instead of a Stmt*, since we only store bindings for Expr*. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46891 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-08Moved implementation of "RemoveDeadBindings" from the mainTed Kremenek
GRConstants logic to ValueStateManager. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46888 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-08More variable renamings.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46875 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-08Renamed InvalidValue to UnknownVal.Ted Kremenek
Renamed UninitializedValue to UninitializedVal. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46874 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-07Added recording of "implicit" NULL dereferences of symbolic pointers.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46843 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-07Added several guards in transfer functions for "InvalidValues".Ted Kremenek
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). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46839 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-07Added transfer function logic for ReturnStmts.Ted Kremenek
Fixed insidious bug in handling dereferences. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46835 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-06Fixed bug when allocating a ValueStateImpl object in getPersistentState()Ted Kremenek
using the bump-pointer allocator and a placed new; we accidentally allocated a ValueStateImpl* instead, causing an overrun when we did a placed new(). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46793 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-06Added some skeleton code for performing "assume" on symbols: e.g. assume($0 ↵Ted Kremenek
!= 0). This action will add constraints to the possible values of a symbol. Still needs to be debugged. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46789 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-05Moved subclasses of LValue and NonLValue into their own namespaces.Ted Kremenek
This noticeably cleans up the naming of these classes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46770 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-05Added a "ConstantNotEq" map to ValueState (and added necessary typedefs and ↵Ted Kremenek
factory objects to ValueStateManager). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46758 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-05Overhauling of "ValueState" so that it represents its own functional dataTed Kremenek
structure that can contain several maps, not just one. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46744 91177308-0d34-0410-b5e6-96231b3b80d8