aboutsummaryrefslogtreecommitdiff
path: root/include/clang/Analysis/PathSensitive
AgeCommit message (Collapse)Author
2008-08-16GRState:Ted Kremenek
- Remove ConstNotEq from GRState/GRStateManager (!= tracking uses GDM instead). - GRStateManager now can book-keep "contexts" (e.g., factory objects) for uses with data elements stored into the GDM. - Refactor pretty-printing of states to use GRState::Printer objects exclusively. This removed a huge amount of pretty-printing logic from GRExprEngine. CFRefCount - Simplified some API calls based on refinements to the GDM api. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54835 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-14Migrated retain/release checker to use the Generic Data Map in GRState (insteadTed Kremenek
of using CheckerState). Removed CheckerState from GRState. Added class GRStateRef which wraps GRState* and GRStateManager*. This is handy for generating new states with a single handle. Added member template set/get functions to GRStateRef/GRState/GRStateManager for accessing the Generic Data Map. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54788 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-13Renamed GRState::CheckerStatePrinter to GRState::Printer.Ted Kremenek
Updated checker state printer interface to allow transfer functions to return an arbitrary number of GRState::Printers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54762 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-13Rename ValueState.h -> GRState.hTed Kremenek
Rename ValueState.cpp -> GRState.cpp git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54722 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-13Rename ValueState -> GRState.Ted Kremenek
Rename ValueStateManager -> GRStateManager. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54721 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-13Fix memory leak found by Sam Bishop: delete WList in the dstor of ↵Ted Kremenek
GRCoreEngineImpl. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54714 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-12Added GenericDataMap as a component of ValueState.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54704 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-07Added AssumeSymGT, AssumeSymGE, AssumeSymLT, AssumeSymLE to add some minor ↵Ted Kremenek
improvements to path-sensitivity. Right now we basically treat 'x > y' and 'x < y' as implying 'x != y', but this restriction will only inevitably apply to our must rudimentary value tracking component (we'll implement more advanced value reasoning later). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54493 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-31Enhanced path-sensitive return-of-stack-address check to print out the name ↵Ted Kremenek
of the variable whose address was returned. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54253 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-22Moved registration of basic path-sensitive checks from GRSimpleVals.cpp to ↵Ted Kremenek
GRExprEngineInternalChecks.cpp. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53909 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-22Added path-sensitive checking for null pointer values passed to function ↵Ted Kremenek
arguments marked nonnull. This implements <rdar://problem/6069935> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53891 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-18Add panic support for NSAssertionHandler.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53758 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-18Fix regression by explicitly checking if we are negating a SymIntConstantVal.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53753 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-18Renamed deterministic EvalBinOp to DetermEvalBinOpNN. This name mangling is ↵Ted Kremenek
unfortunately needed because virtual methods with the same name can be hidden by subclasses. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53751 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-18Created ValueStateSet class to manage the creation of multiple states by a ↵Ted Kremenek
method. Modified the new EvalBinOpNN to generate states instead of nodes. This is a much simpler interface and is what clients will want to do. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53750 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-18Remove dead method.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53748 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-17Move GRTransferFunc* into ValueStateManager, and move the assumption logic ↵Ted Kremenek
there as well. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53743 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-17Remove redundant logic.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53740 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-17Begin major changes to EvalXXX methods in GRTransferFuncs. Currently some ↵Ted Kremenek
of the methods only return an RVal; we want them to be able to create an arbitrary number of states. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53739 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-17Moved RemoveDeadBindings logic for the contents of 'Store' to a virtual ↵Ted Kremenek
RemoveDeadBindings method in StoreManager. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53726 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-14Refactor Dead Stores error reporting to use the simplified ↵Ted Kremenek
BugReporter::EmitBasicReport interface. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53573 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-14Added method "EmitBasicReport" to BugReporter to simplify the emission of ↵Ted Kremenek
simple bug diagnostics. Refactored error reporting in CheckObjCDealloc and CheckObjCInstMethSignature to use this new bug reporting interface (major code simplification). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53560 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-11Refactored auditor interface within GRExprEngine and GRCoreEngine to use a ↵Ted Kremenek
"batch auditor" to dispatch to specialized auditors instead of having a separate vector for each audited Expr*. This not only provides a much cleaner implementation, but also allows us to install auditors for any expression. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53464 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-10Refactored most of the "Store" piece of ValueState into a Store type. TheTed Kremenek
current store implementation is now encapsulated by BasicStore. These changes prompted some long due constification of ValueState. Much of the diffs in this patch include adding "const" qualifiers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53423 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-10Remove unused class AnnotatedPath.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53413 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-10Move some environment methods from ValueState/ValueStateManager to ↵Ted Kremenek
Environment/EnvironmentManager. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53412 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-09Remove getParentMap() from GRExprEngine.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53343 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-08Initial work on splitting the ValueState into an Environment, Store, andTed Kremenek
Constraints. These concepts are already present in the current ValueState, but the implementation is monolothic. Making ValueState more modular opens up new design choices for customizing the analysis engine. In the context of the analysis engine, the "Environment" is the binding between Expr* (expressions) and intermediate symbolic values (RValues). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53252 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-03Have BugReporter::getCFG and BugReporter::getLiveVariables returns pointers ↵Ted Kremenek
instead of references, because they can both fail on functions we cannot construct full CFGs for yet. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53081 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-03Added static analysis check to see if a subclass of NSObject implements ↵Ted Kremenek
-dealloc, and whether or not that implementation calls [super dealloc]. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53075 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-02Unify the code path for the Dead Stores checker to always use the ↵Ted Kremenek
BugReporter interface. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53054 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-02Refactored some of the BugReporter interface so that data such as the ↵Ted Kremenek
ASTContext&, PathDiagnosticClient*, can be provided by an external source. Split BugReporter into BugReporter and GRBugReporter so checkers not based on GRExprEngine can still use the BugReporter mechanism. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53048 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-02GRExprEngine now expects the LiveVariables information to be provided by its ↵Ted Kremenek
creator. This allows an optimization in AnalysisConsumer where the same LiveVariables information is used between multiple analyses. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53046 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-20Modified the dead stores checker to...Ted Kremenek
1) Check if a dead store appears as a subexpression. For such cases, we emit a verbose diagnostic so that users aren't confused. This addresses: <rdar://problem/5968508> checker gives misleading report for dead store in loop 2) Don't emit a dead store warning when assigning a null value to a pointer. This is a common form of defensive programming. We may wish to make this an option to the the checker one day. This addresses the feature request in the following email: http://lists.cs.uiuc.edu/pipermail/cfe-dev/2008-June/001978.html git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52555 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-18Added a new ProgramPoint: PostPurgeDeadSymbols. This new program point ↵Ted Kremenek
distinguishes between the cases when we just evaluated the transfer function of a Stmt* (PostStmt) or performed a load (PostLoad). This solves a caching bug observed in a recent bug report. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52443 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-29- Move ObjC Expresssion AST's from Expr.h => ExprObjC.hSteve Naroff
- #include ExprObjC.h in many places git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51703 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-23Unbreak build. Forget to check in this header file change with a previous ↵Ted Kremenek
commit. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51470 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-16Partitioned BugTypeCachedLocation::isCached() into two methods: one that ↵Ted Kremenek
accepts and ExplodedNode, and the other that accepts a ProgramPoint. The default behavior is to cache bug reports by the location they occur (the end node). Subclasses can override this behavior by providing a different ProgramPoint. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51197 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-09Rename IsPointerType to LVal::IsLValType, and update CFRefCount::EvalSummary ↵Ted Kremenek
to use IsLValType when conjuring symbols for return values (this fixes a bug with an assertion firing in the analyzer when two qualified objective-c types were compared). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50924 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-06Fixed subtle bug in the an GRAuditor object could mark a node as a sinkTed Kremenek
after it was already added to the destination NodeSet. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50701 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-02Rename member variable.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50597 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-01Added line number diagnostics to indicate the allocation site of the leaked ↵Ted Kremenek
object. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50553 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-01Do not highlight bogus ranges for leaks.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50549 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-01Added temporary fix for Obj-C exception handling in the static analyzer: ↵Ted Kremenek
treat these as panic functions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50535 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-01When processing "release", "retain", and "autorelease" messages return theTed Kremenek
lval passed as an argument. Fix: Inverted diagnostic messages. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50513 91177308-0d34-0410-b5e6-96231b3b80d8
2008-04-30added preliminary diagnostics in scan-build results to denote whetherTed Kremenek
a CF memory leak occurred with GC enabled, etc. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50507 91177308-0d34-0410-b5e6-96231b3b80d8
2008-04-30Teach more of the static analyzer about ObjCQualifiedIdType.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50494 91177308-0d34-0410-b5e6-96231b3b80d8
2008-04-29Add lval::ArrayOffset, which represent the locations of entries in an array.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50453 91177308-0d34-0410-b5e6-96231b3b80d8
2008-04-29Added lval::FieldOffset, which represents symbolic lvalues for field offsets ↵Ted Kremenek
from other Lvalues. This removes the failure in null-deref-ps.c (test suite). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50449 91177308-0d34-0410-b5e6-96231b3b80d8
2008-04-29Major rewrite/refactoring of static analysis engine. We now useTed Kremenek
EvalStore/EvalLoad to handle all loads/stores from symbolic memory, allowing us to do checks for null dereferences, etc., at any arbitrary load/store (these were missed checks before). This also resulted in some major cleanups, some conceptual, and others just in the structure of the code. This temporarily introduces a regression in the test suite (null-deref-ps.c) before I add a new LVal type for structure fields. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50443 91177308-0d34-0410-b5e6-96231b3b80d8