aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis
AgeCommit message (Collapse)Author
2008-10-17Return the corresponding MemRegionVal for both rvalue and lvalue of array ofZhongxing Xu
type T. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57665 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-17Array and struct variables do have lvalue. For example,Zhongxing Xu
struct s {}; void f() { int a[10]; int (*p)[10]; p = &a; (*p)[3] =1; struct s d; struct s *q; q = &d; } We return the corresponding MemRegionVal for them. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57664 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-17Remove an untrue assertion: lval::FuncVals can be returned in both rvalue ↵Ted Kremenek
and lvalue contexts. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57659 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-17Remove lval::FieldOffset, lval::ArrayOffset. These will be replaced with ↵Ted Kremenek
regions. Remove GRExprEngine::getLVal and RValues::MakeVal. Enhance StoreManager "GetLValue" methods to dispatch for specific kinds of lvalue queries, as opposed to interogating the expression tree (GRExprEngine already does this). Added FIXMEs. In particular, we no longer "assume" that a base pointer in a field/array access is null (this logic was removed). Perhaps we should do this when fetching the lvalue for fields and array elements? git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57657 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-17Add transfer function support for ObjCIvarRefExpr.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57654 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-16This is the first step to build a better evaluation model for GRExprEngine. AZhongxing Xu
new VisitLValue method is added to replace the old VisitLVal. The semantics model becomes more explicit to separate rvalue evaluation from lvalue evaluation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57627 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-15Enhance dead store checker to not flag preincrements to dead variables where ↵Ted Kremenek
the preincrement is a subexpression, e.g. foo(++x); This can cause false negatives, but will remove a whole class of false positives. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57554 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-09Check some cases for previous patch. Make the code more robust.Zhongxing Xu
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57317 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-08This is the first step to implement a field-sensitive store model. Other ↵Zhongxing Xu
things are simplified: no heap shape assumption, no parameter alias assumption, etc. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57285 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-07Added a function call case that generates sink nodes.Zhongxing Xu
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57240 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-07Migrate MemRegionManager from StateManager to StoreManager.Zhongxing Xu
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57225 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-06Don't use DeclStmt::getDecl(); this will eventually disappear. Just fetch ↵Ted Kremenek
the first decl using the DeclStmt::decl_iterator. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57194 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-06Use DeclStmt::decl_iterator instead of using Decl::getDecl(). Soon ↵Ted Kremenek
DeclStmts will wrap group of Decls. Added FIXME. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57189 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-06Fix typos.Zhongxing Xu
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57146 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-05Remove redundant parameter and rename StMgr to StateMgr.Zhongxing Xu
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57107 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-04This is a big patch, but the functionality change is small and the rest of ↵Ted Kremenek
the patch consists of deltas due to API changes. This patch overhauls the "memory region" abstraction that was prototyped (but never really used) as part of the Store.h. This patch adds MemRegion.h and MemRegion.cpp, which defines the class MemRegion and its subclasses. This classes serve to define an abstract representation of memory, with regions being layered on other regions to to capture the relationships between fields and variables, variables and the address space they are allocated in, and so on. The main motivation of this patch is that key parts of the analyzer assumed that all value bindings were to VarDecls. In the future this won't be the case, and this patch removes lval::DeclVal and replaces it with lval::MemRegionVal. Now all pieces of the analyzer must reason about abstract memory blocks instead of just variables. There should be no functionality change from this patch, but it opens the door for significant improvements to the analyzer such as field-sensitivity and object-sensitivity, both which were on hold until the memory abstraction got generalized. The memory region abstraction also allows type-information to literally be affixed to a memory region. This will allow the some now redundant logic to be removed from the retain/release checker. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57042 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-01Enhance NSError** checking with analogous checking for CFErrorRef*.Ted Kremenek
Expand checking to include functions, not just methods. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56938 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-01Use LVal::IsLValType(T) instead of checking to see if the type is an ↵Ted Kremenek
"lvalue" type directly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56912 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-01Add a QualType to ConjuredSymbol to represent the type and size of the symbol.Ted Kremenek
Use this updated interface when invalidating arguments passed by reference; the type of symbol is of the object passed by reference, not the reference itself. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56894 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-30Revert last patch, but add a fixmeTed Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56832 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-30Within the transfer function of UnaryOperatorExpr, handle implicit promotionsTed Kremenek
from the subexpression type to the expression type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56831 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-27Revert 56735. The old bug categories were more informative.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56755 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-27Change "leaks" to have the category "Performance".Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56735 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-26Move VLA processing logic from LiveVariables to CFG construction. This way ↵Ted Kremenek
all dataflow analyses "see" the VLA size expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56655 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-26Examine VLA size expressions when computing liveness information.Ted Kremenek
Fixes <rdar://problem/6248086> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56645 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-21Change casing of bug type.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56405 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-21The checks in BasicObjCFoundationChecks now have a category: "API Misuse ↵Ted Kremenek
(Apple)" git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56403 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-21The "unused ivar" check now has a category: "Optimization"Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56402 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-21Built-in checks now have a category: "Logic Errors"Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56401 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-21Add a bug category for NSError** checks.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56394 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-20Add "category" to BugTypes, allowing bugs to be grouped.Ted Kremenek
Changed casing of many bug names. The convention will be to have bug names (mostly) lower cased, and categories use some capitalization. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56385 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-20Add PostStore, a new ProgramPoint to distinguish between 'stores' and other ↵Ted Kremenek
PostStmts. GRExprEngine: Use PostStore in EvalStore. Use a second version of EvalStore in EvalBinaryOperator to associate the store with the expression on the LHS. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56383 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-19Bug fix: for the base transfer function logic for casts, handle const casts ↵Ted Kremenek
as just propagating the value. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56368 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-19Fixed logic error in BasicConstraintManager pointed out by Zhongxing Xu.Ted Kremenek
For checking if a symbol >= value, we need to check if symbol == value || symbol > value. When checking symbol > value and we know that symbol != value, the path is infeasible only if value == maximum integer. For checking if a symbol <= value, we need to check if symbol == value || symbol < value. When checking symbol < value and we know that symbol != value, the path is infeasible only if value == minimum integer. Updated test case exercising this logic: we only prune paths if the values are unsigned. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56354 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-19When we have a binary expression 'int operator symbol', properly rewrite this asTed Kremenek
'symbol operator-reverse int'. This patch is a combination of code from Zhongxing Xu and myself (Zhongxing noticed this bug for the cases of relational operators). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56351 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-19Add an omitted case for AssumeSymInt.Zhongxing Xu
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56334 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-19Add panic function "__assert_fail".Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56327 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-18Register the implicit null-dereferenced object as a notable symbol.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56319 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-18Implement second part of PR 2600: NSError** parameter may be null, and ↵Ted Kremenek
should be checked before being dereferenced. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56318 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-18Change implementation of NSError** coding-style check to be invoked at the ↵Ted Kremenek
end of the retain/release analysis. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56312 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-18Implemented one of the checks requested in PR 2600:Ted Kremenek
"Method accepting NSError** argument should have non-void return value to indicate that an error occurred." Test case written, but the header needs to be delta-debugged reduced. Will commit shortly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56297 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-16Minor pass-sensitivity improvement:Ted Kremenek
if we know that 'len != 0' and know that 'i == 0' then we know that 'i < len' must evaluate to true and cannot evaluate to false git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56260 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-16ProgramPoint now takes the space of two pointers instead of one. This change wasTed Kremenek
motivated because it became clear that the number of subclasses of ProgramPoint would expand and we ran out of bits to represent a pointer variant. As a plus of this change, BlockEdge program points can now be represented explicitly without using a cache of CFGBlock* pairs in CFG. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56245 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-13Patch by Csaba Hruska!Ted Kremenek
"Here is a patch what replaces std::ostream with llvm::raw_ostream. This patch covers the AST library, but ignores Analysis lib." git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56185 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-12Add missing spaces in path diagnostics.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56166 91177308-0d34-0410-b5e6-96231b3b80d8
2008-09-03Store: (static analyzer)Ted Kremenek
- Change definition of store::Region and store::Binding (once again) to make them real classes that just wrap pointers. This makes them more strictly typed, and allows specific implementations of Regions/Bindings to just subclass them. - minor renamings to RegionExtent and its subclasses - added a bunch of doxygen comments StoreManager: (static analyzer) - added 'iterBindings', an iteration method for iterating over the bindings of a store. It that takes a callback object (acting like a poor man's closure). - added 'getRVal' version for store::Binding. Will potentially phase the other versions of GetRVal in StoreManager out. - reimplemented 'getBindings' to be non-virtual and to use 'iterBindings' BasicStoreManager: (static analyzer) - implemented 'iterBindings' for BasicStoreManager git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55688 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-30Add newline at end of file.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55559 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-29Added LLVM comment header.Zhongxing Xu
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55537 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-29Migrate the rest symbolic analysis stuff to BasicConstraintManager.Zhongxing Xu
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55536 91177308-0d34-0410-b5e6-96231b3b80d8
2008-08-29Remove dead method.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55526 91177308-0d34-0410-b5e6-96231b3b80d8