aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis
AgeCommit message (Collapse)Author
2008-07-07Do not emit a "missing -dealloc" warning if a class contains no ivars that ↵Ted Kremenek
are pointers. This patch aims to address some of the concerns of PR 2517: http://llvm.org/bugs/show_bug.cgi?id=2517 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53168 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-03Use conjured symbols for variables whose values are invalidated whenTed Kremenek
passed-by-reference to a function. This allows us to build up constraints for their new values and restore some lost path-sensitivity. This addresses a few false positives since in Adium. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53125 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-03Fix a bug in the dead stores checker reported in the following email:Ted Kremenek
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2008-July/002157.html Essentially the observer mechanism in LiveVariables was observing block-level expressions multiple times, leading to a case where the dead store checker could see a value as dead when it was really live. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53115 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-03Skip the "-dealloc" check if a ObjC class contains no ivars.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53100 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-03For the -dealloc checker, check the LangOptions to determine whether or not ↵Ted Kremenek
the code is compiled with GC. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53098 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-07-02Added version of CheckDeadStores that accepts a client-provided ↵Ted Kremenek
LiveVariables object. Modified the DeadStores logic in AnalysisConsumer.cpp to use the LiveVariables object created by the AnalysisManager. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53043 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-01Unlike NSWindow objects, NSPanel objects initially do not have self-ownership.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52963 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-01Temporarily treat "Autorelease" as "StopTracking". This is the original ↵Ted Kremenek
behavior. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52940 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-30Added "Autorelease" ArgEffect to better simulate "autorelease" messages. RightTed Kremenek
now this does the same thing as "MayEscape", but more functionality will go in here shortly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52904 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-26Added a simple static analysis check to look for improper uses of ↵Ted Kremenek
CFCreateNumber. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52799 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-25CF ref checker:Ted Kremenek
Tracked objects now have their type information tracked with them. Enhanced summaries for ObjC methods to include the type information of the receiver. Used the enhanced summaries to support the idiom that NSWindow owns itself (it sends a release message to itself upon close). Added some comments. Did some cleanups with the checker logic using operator overloading (reduced redundant code which I was concerned about being the source of bugs). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52741 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-24Remove unneeded method arguments.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52668 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-24Cache ObjC summaries by IdentifierInfo*, not by ObjCInterfaceDecl.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52667 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-23Added ObjCSummaryCache, a new summary cache object to cache summaries for ↵Ted Kremenek
Objective-C methods. Instead of mapping from Selectors -> Summaries, we will now map from (ObjCInterfaceDecl*,Selectors) -> Summaries. This will allow more nuanced summary generation. This patch just swaps in the new data structure; the rest of the code works as before by allowing the ObjCInterfaceDecl* to be null. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52653 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-23Rename summary methods for "instance methods" to "class methods" (the names ↵Ted Kremenek
got screwed up). No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52650 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-23The CF retain/release checker now assumes that allocations do not fail. ↵Ted Kremenek
Eventually we will add a flag to the driver to enable allocation failures (documented as a FIXME). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52632 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-20When using the dead-stores checker with the BugReporter class, properly ↵Ted Kremenek
capture the diagnostic associated with a specific warning and emit it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52565 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-19Introduce initial transfer function support for __imag__ and __real__. We don'tTed Kremenek
have complex RValues yet, so this logic is only fully implemented when __imag__ and __real__ are used on non-complex types. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52501 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-06-17Fix non-termination bug reported by Thomas Clement!Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52426 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-17Change self/_cmd to be instances of ImplicitParamDecl instead of ParmVarDecl.Chris Lattner
Patch by David Chisnall! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52422 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-17This patch is motivated by numerous strict-aliasing warnings when compilingTed Kremenek
clang as a Release build. The big change is that all AST nodes (subclasses of Stmt) whose children are Expr* store their children as Stmt* or arrays of Stmt*. This is to remove strict-aliasing warnings when using StmtIterator. None of the interfaces of any of the classes have changed (except those with arg_iterators, see below), as the accessor methods introduce the needed casts (via cast<>). While this extra casting may seem cumbersome, it actually adds some important sanity checks throughout the codebase, as clients using StmtIterator can potentially overwrite children that are expected to be Expr* with Stmt* (that aren't Expr*). The casts provide extra sanity checks that are operational in debug builds to catch invariant violations such as these. For classes that have arg_iterators (e.g., CallExpr), the definition of arg_iterator has been replaced. Instead of it being Expr**, it is an actual class (called ExprIterator) that wraps a Stmt**, and provides the necessary operators for iteration. The nice thing about this class is that it also uses cast<> to type-checking, which introduces extra sanity checks throughout the codebase that are useful for debugging. A few of the CodeGen functions that use arg_iterator (especially from OverloadExpr) have been modified to take begin and end iterators instead of a base Expr** and the number of arguments. This matches more with the abstraction of iteration. This still needs to be cleaned up a little bit, as clients expect that ExprIterator is a RandomAccessIterator (which we may or may not wish to allow for efficiency of representation). This is a fairly large patch. It passes the tests (except CodeGen/bitfield.c, which was already broken) on both a Debug and Release build, but it should obviously be reviewed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52378 91177308-0d34-0410-b5e6-96231b3b80d8
2008-06-02Teach the CF retain checker about "_init" methods. Fixes: ↵Ted Kremenek
<rdar://problem/5956379> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51872 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-22Prototyped support in the BugReporter to emit diagnostics of the form "p now ↵Ted Kremenek
aliases q". git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51453 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-22Expand retain/release checker to consider methods/function calls that cause aTed Kremenek
tracked object to "escape": it's reference count might be incremented by the called function, thus causing an object's lifetime to extend beyond when the local reference count is decremented to 0. This addresses: <rdar://problem/5933215> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51433 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-22Don't use ostringstream (pulling in <sstream>) when creating the dead store ↵Ted Kremenek
diagnostic (simply not needed). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51432 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-21Improve dead stores diagnostics to include the variable name.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51395 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-21Fixed bug in the transfer function for dereferences: the loaded value from ↵Ted Kremenek
EvalLoad should bind to the UnaryOperator*, not its subexpression. Added test case to exercise this fix when checking for uses of uninitialized values. Patch by Zhongxing Xu! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51377 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-20fix warning with gcc 4.1 (ptr to bool convertion)Nuno Lopes
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51324 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-17Micro-optimization when checking for panic functions.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51214 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-17Fix 80 col violation.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51213 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-17Added panic function _XCAssertionFailureHandler.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51212 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-16Cache leaks by the allocation site, not the leak location.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51198 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-12Support StringLiteralVal when comparing LVal types.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50979 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-07Added support for "drain".Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50831 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-07Expand the CF retain checker to allow the Create/Get rule to apply to anyTed Kremenek
function that returns a CFxxxRef, not just functions whose name begins with CF. This implements <rdar://problem/5917879>. Added test case for this feature. Updated calls to CStrInCStrNoCase to swap their arguments, per compatibility with strcasestr. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50829 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-07Flip order of arguments to CStrInStrNoCase.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50824 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-07Use llvm::CStrInCStrNoCase instead of strcasestr, since the latter is not ↵Ted Kremenek
portable. Correctly check if the result of CStrInCStrNoCase is NULL to generate summaries; before we were inverting the condition. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50822 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-07copy-paste: NS types are not typedefs.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50817 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-07Do not treat **instance** methods "copyWithZone:" and "mutableCopyWithZone:" ↵Ted Kremenek
from NSObject as allocators. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50802 91177308-0d34-0410-b5e6-96231b3b80d8
2008-05-07Be less promiscuous with generating summaries for "new", "copy", "create".Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50798 91177308-0d34-0410-b5e6-96231b3b80d8