Marcin Swiderski
8b99b8a782
In preparation for adding generation of destructors for objects with automatic storage added:
...
- LocalScope class with iterator used to pointing into it,
- fat doxygen comment for LocalScope indended usage,
- BlockScopePosPair class used for storing jump targets/sources (for: goto, break, continue), that replaces raw CFGBlock pointer used earlier for this purpose.
llvm-svn: 114790
2010-09-25 11:05:21 +00:00
Marcin Swiderski
c0ca7316bc
Added:
...
- definitions of interfaces for CFGInitializer and CFGAutomaticObjDtor,
- support for above classes to print_elem function (renamed print_stmt),
- support for VarDecls in StmtPrinterHelper.
llvm-svn: 114403
2010-09-21 05:58:15 +00:00
Zhongxing Xu
d38fb8466c
Tidy up.
...
llvm-svn: 114062
2010-09-16 03:28:18 +00:00
Zhongxing Xu
2cd7a78c76
Introduce new CFGElement hierarchy to support C++ CFG, based on Marcin's patch
...
and discussions with Ted and Jordy.
llvm-svn: 114056
2010-09-16 01:25:47 +00:00
Ted Kremenek
7b31a61d10
Relax assertion in CFG builder when processing ForStmts. This fixes an assertion failure
...
on code containing GNU statement expressions reported in PR 8141.
llvm-svn: 113953
2010-09-15 07:01:20 +00:00
Ted Kremenek
e97b1ebef1
Add CFG::BuildOptions class to pass in CFG builder options under on parameter. Patch by Marcin Świderski!
...
llvm-svn: 113898
2010-09-14 23:41:16 +00:00
Ted Kremenek
8abff774aa
Fix CFGBuilder crash reported in PR 8141.
...
llvm-svn: 113826
2010-09-14 01:13:32 +00:00
Ted Kremenek
35965b972e
Remove from the CFG the half-implemented support for scoping information. We decided that scope information doesn't belong in the CFG at all, since it is a lexical construct.
...
Patch by Marcin Świderski!
llvm-svn: 113798
2010-09-13 22:25:54 +00:00
Ted Kremenek
ed12f1b9f9
Add ObjCAtSynchronizedStmt to the CFG and add GRExprEngine support (PreVisit for checkers).
...
llvm-svn: 113572
2010-09-10 03:05:33 +00:00
Ted Kremenek
f146cd1fa3
Remove stray ';' and convert tabs to spaces.
...
llvm-svn: 113466
2010-09-09 02:57:48 +00:00
Ted Kremenek
b037185b52
Add 'filtered_pred_iterator' and 'filtered_succ_iterator' to CFGBlock. This allows a client
...
to selectively walk successors/predecessors based on commonly used filters. For starters, add
a filter to ignore 'default:' cases for SwitchStmts when all enum values are covered by CaseStmts.
llvm-svn: 113449
2010-09-09 00:06:04 +00:00
Zhongxing Xu
33dfc07b00
FinishBlock() is essentially doing nothing except returning '!badCFG'.
...
llvm-svn: 113149
2010-09-06 07:32:31 +00:00
Zhongxing Xu
b1e10aa670
Simplify CFG construction: bail out early when we have a bad CFG.
...
llvm-svn: 113148
2010-09-06 07:04:06 +00:00
Ted Kremenek
0f5d8bc5fc
Improve CFG printing support for CXXOperatorCallExpr and CXXBindTemporaryExpr.
...
llvm-svn: 112619
2010-08-31 18:47:37 +00:00
Ted Kremenek
128d04dfe8
Explicitly handle CXXOperatorCallExpr when building CFGs. We should treat it the same as CallExprs.
...
Fixes: <rdar://problem/8375510> [Boost] CFGBuilder crash in Boost.Graph
llvm-svn: 112618
2010-08-31 18:47:34 +00:00
Douglas Gregor
79a2788512
Revert my lame attempt at appeasing the CFGBuilder
...
llvm-svn: 112580
2010-08-31 05:36:56 +00:00
Douglas Gregor
f5d453d067
Teach the CFGBuilder not do die on CXXBindTemporaryExpr, CXXOperatorCallExpr. Fixes a Boost.Graph crasher.
...
llvm-svn: 112578
2010-08-31 05:10:27 +00:00
Ted Kremenek
82bfc86792
Explicitly handle CXXExprWithTemporaries during CFG construction by just visiting the subexpression. While we don't do anything intelligent right now, this obviates a bogus -Wunreahable-code warning reported in PR 6130.
...
llvm-svn: 112334
2010-08-28 00:19:02 +00:00
John McCall
e302792b61
GCC didn't care for my attempt at API compatibility, so brute-force everything
...
to the new constants.
llvm-svn: 112047
2010-08-25 11:45:40 +00:00
Ted Kremenek
4f2ab5a549
Fix horrible CFG bug caused by a series of NullStmts appearing at the beginning of a do...while loop. This would cause
...
the body of the DoStmt to be disconnected from the preceding code.
llvm-svn: 111283
2010-08-17 21:00:06 +00:00
Ted Kremenek
110974dfa4
CFGBuilder: don't create the empty "loop back" block for DoStmts if the loop edge can never be taken.
...
llvm-svn: 111282
2010-08-17 20:59:56 +00:00
Ted Kremenek
60fa657aa2
Fix CFGBuilder to not blow out the stack when processing deeply nested CaseStmts. Fixes <rdar://problem/8268753>.
...
llvm-svn: 110286
2010-08-04 23:54:30 +00:00
Ted Kremenek
dc03bd0894
Add 'AnalysisContext::getUnoptimizedCFG()' to allow clients to get access to the original
...
CFG without any edges pruned out because of trivially solvable conditions (e.g., 'if (0)').
llvm-svn: 110085
2010-08-02 23:46:59 +00:00
Zhongxing Xu
ea9fcffe03
Make addStmt always add stmt. Delegate other cases to Visit() directly.
...
llvm-svn: 105384
2010-06-03 06:43:23 +00:00
Zhongxing Xu
41cdf585c2
CFG: add all LHS of assingments as lvalue. This improves support for C++ reference. Patch by Jordy.
...
llvm-svn: 105383
2010-06-03 06:23:18 +00:00
Ted Kremenek
304a9537e1
Fix crash in CFG construction for 'break' statements appearing in statement expressions
...
within the increment code of a for loop.
llvm-svn: 104375
2010-05-21 20:30:15 +00:00
Ted Kremenek
ecc31c93c2
Don't add a null successor to a CFGBlock when the contents of an @synchronized statement is empty.
...
Fixes <rdar://problem/7979430>.
llvm-svn: 103717
2010-05-13 16:38:08 +00:00
Ted Kremenek
bc1416dcad
Add null check in CFGBuilder::VisitStmt() to make CFG construction
...
more resilient to bad code.
llvm-svn: 102793
2010-04-30 22:25:53 +00:00
Ted Kremenek
989da5eeff
Fix CFG crasher involving statement expressions reported in PR 6938.
...
llvm-svn: 102576
2010-04-29 01:10:26 +00:00
Zhongxing Xu
b5e94ac97d
Use direct assignment instead of user defined conversion.
...
llvm-svn: 101236
2010-04-14 05:50:04 +00:00
Zhongxing Xu
7e61217d86
CFGBuilder: always add C++ member call expr as block-level expr.
...
llvm-svn: 101127
2010-04-13 09:38:01 +00:00
Ted Kremenek
5868ec6e3d
Fix CFG bug where bases of member expressions were not always evaluated in a lvalue context. Fixes <rdar://problem/7813989>.
...
llvm-svn: 100966
2010-04-11 17:02:10 +00:00
Ted Kremenek
66de60376c
Fix bug in AddStmtChoice:asLValue() where 'AsLValueNotAlwaysAdd' would not be treated as indicating an lvalue.
...
llvm-svn: 100965
2010-04-11 17:02:04 +00:00
Ted Kremenek
d2ba1f9ff0
Sort visitor methods. No functionality change.
...
llvm-svn: 100964
2010-04-11 17:01:59 +00:00
Rafael Espindola
c50c27cca8
the big refactoring bits of PR3782.
...
This introduces FunctionType::ExtInfo to hold the calling convention and the
noreturn attribute. The next patch will extend it to include the regparm
attribute and fix the bug.
llvm-svn: 99920
2010-03-30 20:24:48 +00:00
Rafael Espindola
8756268ee5
Be a bit more consistent in using operator->
...
This patch moves some methods from QualType to Type and changes the users to
use -> instead of .
llvm-svn: 99805
2010-03-29 03:39:46 +00:00
Benjamin Kramer
a3b13411fa
Simplify code a bit and remove unneeded semicolons.
...
llvm-svn: 97654
2010-03-03 16:28:47 +00:00
Ted Kremenek
5d2bb1b9b3
[CFG]
...
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.
llvm-svn: 97591
2010-03-02 21:43:54 +00:00
Zhongxing Xu
a396e617b5
Always add CallExpr as block-level expression. Inline-based interprocedural
...
analysis needs this.
llvm-svn: 97014
2010-02-24 02:19:28 +00:00
Daniel Dunbar
260918ce5c
Revert "Simplify code: Succ is guaranteed to be not NULL.", which turns out to
...
not be guaranteed.
llvm-svn: 96782
2010-02-22 05:58:59 +00:00
Zhongxing Xu
d39620c451
Simplify code: Succ is guaranteed to be not NULL.
...
llvm-svn: 96772
2010-02-22 02:59:27 +00:00
Mike Stump
cc3a853df7
Improve unreachable code warnings with respect to dead binary and
...
unary operators.
llvm-svn: 94084
2010-01-21 17:21:23 +00:00
Mike Stump
04c6851cd6
Speed up compilation by avoiding generating exceptional edges from
...
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.
llvm-svn: 94074
2010-01-21 15:20:48 +00:00
Mike Stump
6bf1c08e99
Add infrastructure to add base initializers and member initializers to
...
the CFG. WIP.
llvm-svn: 94062
2010-01-21 02:21:40 +00:00
Mike Stump
845384a938
Wire up the EH context for the catch clauses to the outer EH context. WIP.
...
llvm-svn: 93963
2010-01-20 01:30:58 +00:00
Mike Stump
0bdba6cdd8
Add an exceptional edge from the try terminated block to the outer EH
...
context (try or the Exit block) when there isn't a catch (...).
Improve CFG printing for catch (...).
llvm-svn: 93962
2010-01-20 01:15:34 +00:00
Mike Stump
92244b00c7
Add CFG support for the start and end of scopes and infrastructure for
...
implicit destructor calls. WIP.
llvm-svn: 93922
2010-01-19 22:00:14 +00:00
Ted Kremenek
60983dc3ad
Tighten code and rework indentation of some if() branches (for readability). No functionality change.
...
llvm-svn: 93904
2010-01-19 20:52:05 +00:00
Ted Kremenek
1362b8bbe6
Remove extra space in uses of 'assert()'.
...
llvm-svn: 93903
2010-01-19 20:46:35 +00:00
Ted Kremenek
b27378c82f
Re-alphabetize cases in switch statement.
...
llvm-svn: 93902
2010-01-19 20:40:33 +00:00