]> granicus.if.org Git - clang/commit
[CFG]
authorTed Kremenek <kremenek@apple.com>
Tue, 2 Mar 2010 21:43:54 +0000 (21:43 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 2 Mar 2010 21:43:54 +0000 (21:43 +0000)
commit5ba290a12fb9390a77ea4dca3d98deb53022d182
tree2e8f3deccfd293605355fb0f2192f88f88431c7f
parenta804a68f5a1ad739eb17ff2fd942d12abbc30b08
[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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97591 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Analysis/CFG.cpp
lib/Analysis/UninitializedValues.cpp
lib/Checker/BasicStore.cpp