]> granicus.if.org Git - clang/commit
Modified the notion of "Block-level expressions" in CFGs to include Stmt*. This
authorTed Kremenek <kremenek@apple.com>
Thu, 17 Jan 2008 20:48:37 +0000 (20:48 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 17 Jan 2008 20:48:37 +0000 (20:48 +0000)
commit86946745225096243f6969dc745267b78fc211a6
treeb0a2b0cfa4a9c1198f7308bd9263c5de16493d37
parent7c453b3ded5dc9bff05e6e66eb725a0938303d73
Modified the notion of "Block-level expressions" in CFGs to include Stmt*. This
is because GNU-style Statement-expressions cause the last statement in the
statement-expression to act like an expression.

We now have two notions: block-level statements and block-level expressions.

The former are all Stmt* that appear in the list of statements in CFGBlocks. The
latter is the subset of the former; these block-level statements are used as
subexpressions somewhere in the AST. CFG::isBlockExpr() returns true for the
latter, not the former (previously isBlockExpr() always returned true for
non-Expr Stmt*).

Modified the LiveVariables analysis to also track liveness state for block-level
expressions (using the updated definition of block-level expressions).

Modified the dataflow solver so that when it records values for block-level
statements, it records the dataflow value *before* the transfer function for a
Stmt* is evaluated (not after). This is more in sync in what clients will want.

Modified CFGStmtVisitor to record the current block-level statement.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46143 91177308-0d34-0410-b5e6-96231b3b80d8
AST/CFG.cpp
Analysis/LiveVariables.cpp
include/clang/AST/CFG.h
include/clang/Analysis/Analyses/LiveVariables.h
include/clang/Analysis/FlowSensitive/DataflowSolver.h
include/clang/Analysis/FlowSensitive/DataflowValues.h
include/clang/Analysis/Support/ExprDeclBitVector.h
include/clang/Analysis/Visitors/CFGStmtVisitor.h