summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/CFG.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* CFG tweak: in a WhileStmt, the condition variable initializer is evaluated ↵Ted Kremenek2009-12-241-14/+13
| | | | | | every time the condition is checked. llvm-svn: 92111
* Add CFG support for the initializer of the condition variable of a WhileStmt.Ted Kremenek2009-12-241-1/+14
| | | | llvm-svn: 92105
* Add CFG support for the initializer of the condition variable of a SwitchStmt.Ted Kremenek2009-12-241-2/+13
| | | | llvm-svn: 92101
* Tidy up FindSubExprAssignments to not deference the child_iterator multiple ↵Ted Kremenek2009-12-231-7/+10
| | | | | | times. llvm-svn: 92087
* Add CFG support for the condition variable that can appear in IfStmts in C++ ↵Ted Kremenek2009-12-231-1/+13
| | | | | | | | mode. Add transfer function support in GRExprEngine for IfStmts with initialized condition variables. llvm-svn: 91987
* Add (initial?) static analyzer support for handling C++ references.Ted Kremenek2009-12-161-52/+74
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Start the ball rolling on C++ support in the static analyzer. ForTed Kremenek2009-12-151-0/+2
| | | | | | | | 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
* Include BlockDeclRefExprs in constructed CFGs.Ted Kremenek2009-12-041-10/+0
| | | | llvm-svn: 90583
* Adapt to the DOTGraphTraits changes in LLVM.Tobias Grosser2009-11-301-2/+4
| | | | llvm-svn: 90137
* lib/Analysis: Remove VISIBILITY_HIDDEN from definitions in anonymous namespaceKovarththanan Rajaratnam2009-11-281-4/+3
| | | | llvm-svn: 90028
* Allow building of CFGs for ASTs that contain BlockExprs.Ted Kremenek2009-11-251-3/+6
| | | | llvm-svn: 89830
* Remove stale comment and tighten code.Ted Kremenek2009-10-201-6/+1
| | | | llvm-svn: 84697
* Use llvm::OwningPtr in CFGBuilder, fixing a leak on an error path.Ted Kremenek2009-10-201-12/+7
| | | | llvm-svn: 84695
* Use a BumpPtrAllocator to allocate all aspects of CFG, including CFGBlocks, ↵Ted Kremenek2009-10-121-63/+72
| | | | | | | | | | | | 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> llvm-svn: 83899
* When building CFGs, no longer reverse the statements in the CFGBlock. InsteadTed Kremenek2009-09-241-16/+8
| | | | | | | | | 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). llvm-svn: 82702
* Remove tabs, and whitespace cleanups.Mike Stump2009-09-091-97/+97
| | | | llvm-svn: 81346
* CFG construction: Abort CFG construction when processing a CompoundStmt if anyTed Kremenek2009-08-271-0/+3
| | | | | | of its subexpressions resulted in a "bad CFG". llvm-svn: 80298
* Don't try to evaluate an expression that is type- or value-dependent while ↵Douglas Gregor2009-08-241-1/+2
| | | | | | building the CFG llvm-svn: 79941
* Replace cerr with errs().Benjamin Kramer2009-08-231-5/+4
| | | | llvm-svn: 79854
* If the 'while' has an empty body, set the body to the continue target block.Zhongxing Xu2009-08-201-1/+1
| | | | | | | Although this does not make the CFG more correct, it makes the CFG more beautiful without multiple roots. llvm-svn: 79509
* If the body of for loop is empty, set its body to the continue target.Zhongxing Xu2009-08-201-1/+1
| | | | | | Otherwise we get a wrong CFG. llvm-svn: 79507
* Add noreturn as a type attribute, handle printing for them and handleMike Stump2009-07-251-16/+20
| | | | | | calls to noreturn function pointers when CFG building. llvm-svn: 77089
* Add doxygen comments and simplify expression.Ted Kremenek2009-07-241-1/+6
| | | | llvm-svn: 76955
* Introduce a new variant type 'TryResult' to represent the result ofTed Kremenek2009-07-241-106/+61
| | | | | | | | | | | 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. llvm-svn: 76947
* Refactor and push the evaluation as late as possible.Mike Stump2009-07-231-105/+54
| | | | llvm-svn: 76911
* Improve CFG support for C++ throw expressions.Mike Stump2009-07-221-0/+21
| | | | llvm-svn: 76814
* Make 'SaveAndRestore' and friends reusable classes in libAnalysis.Ted Kremenek2009-07-221-12/+1
| | | | llvm-svn: 76795
* Wire up CFG improvements for __builtin_choose_expr.Mike Stump2009-07-211-2/+20
| | | | llvm-svn: 76531
* Wire up CFG improvements for do { } while () when the condition is known.Mike Stump2009-07-211-7/+26
| | | | llvm-svn: 76530
* Wire up for statement CFG improvements for conditionals that are known.Mike Stump2009-07-211-10/+31
| | | | llvm-svn: 76529
* Wire up CFG improvements for while when the condition is known.Mike Stump2009-07-211-6/+26
| | | | llvm-svn: 76522
* Add yet more analysis for CFGs involving conditionals that are actually ↵Mike Stump2009-07-201-25/+99
| | | | | | constant. llvm-svn: 76500
* Fix some fallout from CFGBuilder restructuring: all expressions that we ↵Ted Kremenek2009-07-181-20/+24
| | | | | | explicitly handle have the possibility to be block-level expressions. llvm-svn: 76277
* Fix possible null dereference in CFG construction.Ted Kremenek2009-07-171-0/+1
| | | | llvm-svn: 76261
* Restructure CFG builder to have just one visitor path instead of two. The resultTed Kremenek2009-07-171-328/+407
| | | | | | | | is an algorithm that is much easier to understand and slightly more efficient. Thanks to Mike Stump for our discussions on the CFGBuilder and his comments that helped prompt this long needed cleanup. llvm-svn: 76250
* Move WalkAST logic for 'ChooseExpr' to 'VisitChooseExpr'.Ted Kremenek2009-07-171-34/+35
| | | | llvm-svn: 76205
* Move WalkAST logic for 'ConditionalOperator' into 'VisitConditionalOperator'.Ted Kremenek2009-07-171-58/+61
| | | | llvm-svn: 76202
* Remove stale comments.Ted Kremenek2009-07-171-6/+2
| | | | llvm-svn: 76196
* clean up this code, add the fixme back.Chris Lattner2009-07-171-11/+6
| | | | llvm-svn: 76180
* Refactor code into a new CallExpr::getDirectCallee() method. Simplify someZhongxing Xu2009-07-171-8/+3
| | | | | | code with the new method. llvm-svn: 76164
* Fixup indentation of rest of switch statement to match llvm codingMike Stump2009-07-171-690/+667
| | | | | | | conventions. Also reflowed comments and removed spaces at end of lines and fixed up 80 col violations. llvm-svn: 76140
* Make noreturn functions alter the CFG.Mike Stump2009-07-171-4/+34
| | | | llvm-svn: 76133
* Move the source-level CFG from libAST to libAnalysis.Ted Kremenek2009-07-161-0/+1924
llvm-svn: 76092
OpenPOWER on IntegriCloud