[cfe-commits] r46151 - /cfe/trunk/include/clang/Analysis/FlowSensitive/DataflowSolver.h
Ted Kremenek
kremenek at apple.com
Thu Jan 17 16:38:57 PST 2008
Author: kremenek
Date: Thu Jan 17 18:38:55 2008
New Revision: 46151
URL: http://llvm.org/viewvc/llvm-project?rev=46151&view=rev
Log:
Changed DataflowSolver to always associated recorded dataflow values with
the position *before* a statement, regardless of whether we are doing a
forward or backwards analysis.
Modified:
cfe/trunk/include/clang/Analysis/FlowSensitive/DataflowSolver.h
Modified: cfe/trunk/include/clang/Analysis/FlowSensitive/DataflowSolver.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/FlowSensitive/DataflowSolver.h?rev=46151&r1=46150&r2=46151&view=diff
==============================================================================
--- cfe/trunk/include/clang/Analysis/FlowSensitive/DataflowSolver.h (original)
+++ cfe/trunk/include/clang/Analysis/FlowSensitive/DataflowSolver.h Thu Jan 17 18:38:55 2008
@@ -235,10 +235,18 @@
/// ProcessBlock - Process the transfer functions for a given block.
void ProcessBlock(const CFGBlock* B, bool recordStmtValues) {
- for (StmtItr I=ItrTraits::StmtBegin(B), E=ItrTraits::StmtEnd(B); I!=E;++I) {
- if (recordStmtValues) D.getStmtDataMap()[*I] = TF.getVal();
- TF.BlockStmt_Visit(const_cast<Stmt*>(*I));
- }
+ for (StmtItr I=ItrTraits::StmtBegin(B), E=ItrTraits::StmtEnd(B); I!=E;++I)
+ ProcessStmt(*I, recordStmtValues, AnalysisDirTag());
+ }
+
+ void ProcessStmt(const Stmt* S, bool record, dataflow::forward_analysis_tag) {
+ if (record) D.getStmtDataMap()[S] = TF.getVal();
+ TF.BlockStmt_Visit(const_cast<Stmt*>(S));
+ }
+
+ void ProcessStmt(const Stmt* S, bool record, dataflow::backward_analysis_tag){
+ TF.BlockStmt_Visit(const_cast<Stmt*>(S));
+ if (record) D.getStmtDataMap()[S] = TF.getVal();
}
/// UpdateEdges - After processing the transfer functions for a
More information about the cfe-commits
mailing list