summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis
Commit message (Collapse)AuthorAgeFilesLines
* Teach GRExprEngine::VisitLValue that we don't handle CXXZeroInitValueExprs yet.Ted Kremenek2009-12-231-1/+2
| | | | llvm-svn: 91970
* Also treat the type of the subexpression as a pointer in ↵Ted Kremenek2009-12-231-0/+1
| | | | | | GRExprEngine::VisitCast when the expression is handled as an lvalue. llvm-svn: 91969
* Add basic support for analyzing CastExprs as lvalues.Ted Kremenek2009-12-231-3/+27
| | | | llvm-svn: 91952
* Add transfer functions support for visiting an Objective-C message ↵Ted Kremenek2009-12-222-42/+78
| | | | | | expression as an lvalue when the return type is a C++ reference. llvm-svn: 91926
* Add comments.Zhongxing Xu2009-12-211-0/+1
| | | | llvm-svn: 91818
* Use the FunctionDecl's result type to know exactly if it returns a reference.Zhongxing Xu2009-12-191-0/+10
| | | | llvm-svn: 91751
* Enhance GRExprEngine::VisitCallExpr() to be used in an lvalue context. ↵Ted Kremenek2009-12-181-5/+52
| | | | | | Uncovered a new failing test case along the way, but we're making progress on handling C++ references in the analyzer. llvm-svn: 91710
* Tweak formatting and comments.Ted Kremenek2009-12-171-6/+4
| | | | llvm-svn: 91615
* Convert GRExprEngine::VisitCallExpr() to use a worklist instead of recursion ↵Ted Kremenek2009-12-171-45/+64
| | | | | | to evaluate the arguments of a CallExpr. This simplifies the logic and makes it easier to read. (it also avoids any issues with blowing out the stack if the CallExpr had a ridiculous number of arguments) llvm-svn: 91613
* Reduce nesting by using early exits. No functionality change.Ted Kremenek2009-12-171-35/+46
| | | | llvm-svn: 91610
* Sort switch statement. No functionality change.Ted Kremenek2009-12-171-15/+15
| | | | llvm-svn: 91591
* Fix check in GRExprEngine for the 'main' function to handle NULL ↵Ted Kremenek2009-12-171-16/+17
| | | | | | IdentifierInfo*'s. llvm-svn: 91577
* Completely remove ObjCObjectRegion (tests pass this time).Ted Kremenek2009-12-164-20/+9
| | | | llvm-svn: 91572
* Temporarily revert 91553.Ted Kremenek2009-12-161-5/+9
| | | | llvm-svn: 91557
* Remove use of ObjCObjectRegion from BasicStoreManager.Ted Kremenek2009-12-161-9/+5
| | | | llvm-svn: 91553
* Add a new kind of region: CXXObjectRegion. Currently it has only one Zhongxing Xu2009-12-164-15/+54
| | | | | | | | attribute: the object type. Add initial support for visiting CXXThisExpr. Fix a bunch of 80-col violations. llvm-svn: 91535
* Teach RetainSummaryManager::getSummary(FunctionDecl* FD) that ↵Ted Kremenek2009-12-161-1/+5
| | | | | | 'FD->getIdentifier()' will not always return a non-null IdentifierInfo*. llvm-svn: 91512
* Teach OSAtomicChecker that a FunctionDecl's name isn't always a simple ↵Ted Kremenek2009-12-161-3/+7
| | | | | | IdentifierInfo*. llvm-svn: 91511
* Teach NoReturnFunctionChecker that FunctionDecl::getIdentifier() is not ↵Ted Kremenek2009-12-161-3/+2
| | | | | | guaranteed to return a non-null IdentifierInfo*. llvm-svn: 91510
* Add (initial?) static analyzer support for handling C++ references.Ted Kremenek2009-12-166-79/+176
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change was a lot bigger than I originally anticipated; among other things it requires us storing more information in the CFG to record what block-level expressions need to be evaluated as lvalues. The big change is that CFGBlocks no longer contain Stmt*'s by CFGElements. Currently CFGElements just wrap Stmt*, but they also store a bit indicating whether the block-level expression should be evalauted as an lvalue. DeclStmts involving the initialization of a reference require us treating the initialization expression as an lvalue, even though that information isn't recorded in the AST. Conceptually this change isn't that complicated, but it required bubbling up the data through the CFGBuilder, to GRCoreEngine, and eventually to GRExprEngine. The addition of CFGElement is also useful for when we want to handle more control-flow constructs or other data we want to keep in the CFG that isn't represented well with just a block of statements. In GRExprEngine, this patch introduces logic for evaluating the lvalues of references, which currently retrieves the internal "pointer value" that the reference represents. EvalLoad does a two stage load to catch null dereferences involving an invalid reference (although this could possibly be caught earlier during the initialization of a reference). Symbols are currently symbolicated using the reference type, instead of a pointer type, and special handling is required creating ElementRegions that layer on SymbolicRegions (see the changes to RegionStoreManager). Along the way, the DeadStoresChecker also silences warnings involving dead stores to references. This was the original change I introduced (which I wrote test cases for) that I realized caused GRExprEngine to crash. llvm-svn: 91501
* Remove ValueManager::getRegionValueSymbolValOrUnknown(). It was just extra ↵Ted Kremenek2009-12-151-7/+6
| | | | | | veneer on top of getRegionValueSymbolVal(). llvm-svn: 91471
* update to match LLVM API change:Chris Lattner2009-12-151-4/+2
| | | | | | | | | Remove isPod() from DenseMapInfo, splitting it out to its own isPodLike type trait. This is a generally useful type trait for more than just DenseMap, and we really care about whether something acts like a pod, not whether it really is a pod. llvm-svn: 91422
* Until we can make the dead stores checker smarter, dont' emit dead store ↵Ted Kremenek2009-12-151-0/+4
| | | | | | warnings for C++ objects (whose constructors/destructors have possible side-effects). llvm-svn: 91412
* Start the ball rolling on C++ support in the static analyzer. ForTed Kremenek2009-12-152-0/+37
| | | | | | | | now, don't construct CFGs that contain C++ try/catch statements, and have GRExprEngine abort a path if it encounters a C++ construct it doesn't understand (which is mostly everything at this point). llvm-svn: 91389
* Fix: <rdar://problem/7468209> SymbolManager::isLive() should not crash on ↵Ted Kremenek2009-12-143-3/+14
| | | | | | captured block variables that are passed by reference llvm-svn: 91348
* Use insert to avoid destroying existing nodes.Zhongxing Xu2009-12-141-1/+1
| | | | llvm-svn: 91258
* Add initial support for realloc() in MallocChecker.Zhongxing Xu2009-12-121-10/+82
| | | | llvm-svn: 91216
* Un-namespace-qualify llvm_unreachable. It's a macro, so the qualification gaveJeffrey Yasskin2009-12-121-1/+1
| | | | | | no extra safety anyway. llvm-svn: 91207
* Switch PathDiagnostic to StringRef.Benjamin Kramer2009-12-111-36/+13
| | | | llvm-svn: 91155
* Enhance understanding of VarRegions referenced by a block whose declarations ↵Ted Kremenek2009-12-114-10/+40
| | | | | | are outside the current stack frame. Fixes <rdar://problem/7462324>. llvm-svn: 91107
* Completely evaluate malloc/free in MallocChecker.cpp.Zhongxing Xu2009-12-111-8/+20
| | | | llvm-svn: 91100
* Use 'class' instead of 'struct'.Zhongxing Xu2009-12-111-1/+2
| | | | llvm-svn: 91085
* Fix null dereference in OSAtomicChecker and special case SymbolicRegions. ↵Ted Kremenek2009-12-091-4/+13
| | | | | | We still aren't handling them correctly; I've added to failing test cases to test/Analysis/NSString-failed-cases.m that should pass and then be merged in to test/Analysis/NSString.m. llvm-svn: 90993
* Refactor OSAtomic evaluation logic into OSAtomicChecker.Zhongxing Xu2009-12-094-151/+191
| | | | llvm-svn: 90968
* Use a temporary destination set such that we can clear fake auto transitions.Zhongxing Xu2009-12-091-3/+24
| | | | | | | | Otherwise, even when real evaluation occurs, the previous fake auto transitions would still be in the destination set, causing fake state bifurcation. llvm-svn: 90967
* OSAtomic simulation: use the original region as the location to load from,Zhongxing Xu2009-12-092-4/+7
| | | | | | | | instead of the ElementRegion obtained from casts. Test cast: the leak cannot occur bacause the true branch cannot be taken. llvm-svn: 90964
* remove dead code.Zhongxing Xu2009-12-091-41/+0
| | | | llvm-svn: 90953
* Insert instead of assign to the dest node set, since we use the dest node setZhongxing Xu2009-12-091-1/+1
| | | | | | repeatedly. llvm-svn: 90952
* Fix a horrid bug in GRExprEngine::CheckerVisit() that was identifiedTed Kremenek2009-12-091-41/+58
| | | | | | | | | by the test case in PR 5627. Essentially we shouldn't clear the ExplodedNodeSet where we deposit newly constructed nodes if that set is the 'Dst' set passed in. It is not okay to clear that set because it may already contain nodes. llvm-svn: 90931
* Refactor builtin function evaluation into a checker.Zhongxing Xu2009-12-084-8/+79
| | | | llvm-svn: 90847
* Add analysis support for blocks. This includes a few key changes:Ted Kremenek2009-12-078-184/+238
| | | | | | | | | | | | | | | | | - Refactor the MemRegion hierarchy to distinguish between different StackSpaceRegions for locals and parameters. - VarRegions for "captured" variables now have the BlockDataRegion as their super region (except those passed by reference) - Add transfer function support to GRExprEngine for BlockDeclRefExprs. This change also supports analyzing blocks as an analysis entry point (top-of-the-stack), which required pushing more context-sensitivity around in the MemRegion hierarchy via the use of LocationContext objects. Functionally almost everything is the same, except we track LocationContexts in a few more areas and StackSpaceRegions now refer to a StackFrameContext object. In the future we will need to modify MemRegionManager to allow multiple StackSpaceRegions in flight at once (for the analysis of multiple stack frames). llvm-svn: 90809
* Add EvalCallExpr interface to checker, and migrate the no-return functionZhongxing Xu2009-12-074-59/+136
| | | | | | | | | handler to this interface. GRExprEngine::CheckerEvalCall() will return true if one of the checkers has processed the node. In the future this might return void when we have some default checker. llvm-svn: 90755
* Teach AnalysisContext::getBody() about BlockDecls.Ted Kremenek2009-12-041-0/+2
| | | | llvm-svn: 90585
* Teach 'ExecutionContinues' (part of BugReporter's diagnostic generation) ↵Ted Kremenek2009-12-041-4/+13
| | | | | | about BlockDecls. llvm-svn: 90584
* Include BlockDeclRefExprs in constructed CFGs.Ted Kremenek2009-12-041-10/+0
| | | | llvm-svn: 90583
* Replace SymbolReaper::isLive(VarDecl) with SymbolReaper::isLive(VarRegion).Ted Kremenek2009-12-043-2/+6
| | | | llvm-svn: 90582
* Rename instance variable to avoid name conflict with parameters, and modify ↵Ted Kremenek2009-12-041-2/+2
| | | | | | addTransition() to compare the correct state values. llvm-svn: 90552
* Allow BlockInvocationContext to wrap either a BlockDecl* or a ↵Ted Kremenek2009-12-041-3/+16
| | | | | | BlockDataRegion*, giving us choice in our degree of context-sensitivity. llvm-svn: 90516
* Refactor LocationContext creation logic into a single member template.Ted Kremenek2009-12-041-48/+50
| | | | llvm-svn: 90509
* Refactor FoldingSet profiling code for LocationContexts, and add a new ↵Ted Kremenek2009-12-041-8/+25
| | | | | | BlockInvocationContext to represent the invocation of a block. llvm-svn: 90506
OpenPOWER on IntegriCloud