aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/CFG.cpp
AgeCommit message (Collapse)Author
2010-03-03Simplify code a bit and remove unneeded semicolons.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97654 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-02[CFG]Ted Kremenek
After discussion with Zhongxing, don't force the initializer of DeclStmts to be block-level expressions. This led to some interesting fallout: [UninitializedValues] Always visit the initializer of DeclStmts (do not assume they are block-level expressions). [BasicStore] With initializers of DeclStmts no longer block-level expressions, this causes self-referencing initializers (e.g. 'int x = x') to no longer cause the initialized variable to be live before the DeclStmt. While this is correct, it caused BasicStore::RemoveDeadBindings() to prune off the values of these variables from the initial store (where they are set to uninitialized). The fix is to back-port some (and only some) of the lazy-binding logic from RegionStore to BasicStore. Now the default values of local variables are determined lazily as opposed to explicitly initialized. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97591 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-24Always add CallExpr as block-level expression. Inline-based interproceduralZhongxing Xu
analysis needs this. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97014 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-22Revert "Simplify code: Succ is guaranteed to be not NULL.", which turns out toDaniel Dunbar
not be guaranteed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96782 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-22Simplify code: Succ is guaranteed to be not NULL.Zhongxing Xu
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96772 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-21Improve unreachable code warnings with respect to dead binary andMike Stump
unary operators. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94084 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-21Speed up compilation by avoiding generating exceptional edges fromMike Stump
CallExprs as those edges help cause a n^2 explosion in the number of destructor calls. Other consumers, such as static analysis, that would like to have more a more complete CFG can select the inclusion of those edges as CFG build time. This also fixes up the two compilation users of CFGs to be tolerant of having or not having those edges. All catch code is assumed be to live if we didn't generate the exceptional edges for CallExprs. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94074 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-21Add infrastructure to add base initializers and member initializers toMike Stump
the CFG. WIP. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94062 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-20Wire up the EH context for the catch clauses to the outer EH context. WIP.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93963 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-20Add an exceptional edge from the try terminated block to the outer EHMike Stump
context (try or the Exit block) when there isn't a catch (...). Improve CFG printing for catch (...). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93962 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-19Add CFG support for the start and end of scopes and infrastructure forMike Stump
implicit destructor calls. WIP. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93922 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-19Tighten code and rework indentation of some if() branches (for readability). ↵Ted Kremenek
No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93904 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-19Remove extra space in uses of 'assert()'.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93903 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-19Re-alphabetize cases in switch statement.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93902 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-19Add try/catch CFG support. Also improve throw CFG support. WIP.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93840 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-24Add CFG support for the initializer of the condition variable of a ForStmt.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92113 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-24CFG tweak: in a WhileStmt, the condition variable initializer is evaluated ↵Ted Kremenek
every time the condition is checked. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92111 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-24Add CFG support for the initializer of the condition variable of a WhileStmt.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92105 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-24Add CFG support for the initializer of the condition variable of a SwitchStmt.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92101 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-23Tidy up FindSubExprAssignments to not deference the child_iterator multiple ↵Ted Kremenek
times. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92087 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-23Add CFG support for the condition variable that can appear in IfStmts in C++ ↵Ted Kremenek
mode. Add transfer function support in GRExprEngine for IfStmts with initialized condition variables. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91987 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-16Add (initial?) static analyzer support for handling C++ references.Ted Kremenek
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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91501 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-15Start the ball rolling on C++ support in the static analyzer. ForTed Kremenek
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). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91389 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-04Include BlockDeclRefExprs in constructed CFGs.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90583 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-30Adapt to the DOTGraphTraits changes in LLVM.Tobias Grosser
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90137 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-28lib/Analysis: Remove VISIBILITY_HIDDEN from definitions in anonymous namespaceKovarththanan Rajaratnam
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90028 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-25Allow building of CFGs for ASTs that contain BlockExprs.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89830 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-20Remove stale comment and tighten code.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84697 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-20Use llvm::OwningPtr in CFGBuilder, fixing a leak on an error path.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84695 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-12Use a BumpPtrAllocator to allocate all aspects of CFG, including CFGBlocks, ↵Ted Kremenek
successor and predecessor vectors, etc. Speedup: when doing 'clang-cc -analyze -dump-cfg' (without actual printing, just CFG building) on the amalgamated SQLite source (all of SQLite in one source file), runtime reduced by 9%. This fixes: <rdar://problem/7250745> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83899 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-24When building CFGs, no longer reverse the statements in the CFGBlock. InsteadTed Kremenek
have the iterators and operator[] handle the traversal of statements, as they are stored in reverse order. Tests show this has no real performance impact, but it does simply the CFG construction logic and will make it slightly easier to change the allocation strategy for CFGBlocks (as we have fewer copies). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82702 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-09Remove tabs, and whitespace cleanups.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81346 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27CFG construction: Abort CFG construction when processing a CompoundStmt if anyTed Kremenek
of its subexpressions resulted in a "bad CFG". git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80298 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-24Don't try to evaluate an expression that is type- or value-dependent while ↵Douglas Gregor
building the CFG git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@79941 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-23Replace cerr with errs().Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@79854 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-20If the 'while' has an empty body, set the body to the continue target block.Zhongxing Xu
Although this does not make the CFG more correct, it makes the CFG more beautiful without multiple roots. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@79509 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-20If the body of for loop is empty, set its body to the continue target.Zhongxing Xu
Otherwise we get a wrong CFG. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@79507 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-25Add noreturn as a type attribute, handle printing for them and handleMike Stump
calls to noreturn function pointers when CFG building. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77089 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-24Add doxygen comments and simplify expression.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76955 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-24Introduce a new variant type 'TryResult' to represent the result ofTed Kremenek
TryEvaluateBool instead of using a raw 'int'. This avoids any confusion of how 'int' converts to bool, and makes the resultant code easier to read. Condense a bunch of 'addSuccessor()' calls in 'if ... else' to use the ternary operator instead. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76947 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-23Refactor and push the evaluation as late as possible.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76911 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-22Improve CFG support for C++ throw expressions.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76814 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-22Make 'SaveAndRestore' and friends reusable classes in libAnalysis.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76795 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-21Wire up CFG improvements for __builtin_choose_expr.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76531 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-21Wire up CFG improvements for do { } while () when the condition is known.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76530 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-21Wire up for statement CFG improvements for conditionals that are known.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76529 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-21Wire up CFG improvements for while when the condition is known.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76522 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-20Add yet more analysis for CFGs involving conditionals that are actually ↵Mike Stump
constant. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76500 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-18Fix some fallout from CFGBuilder restructuring: all expressions that we ↵Ted Kremenek
explicitly handle have the possibility to be block-level expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76277 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-17Fix possible null dereference in CFG construction.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76261 91177308-0d34-0410-b5e6-96231b3b80d8