]> granicus.if.org Git - clang/commit
[analyzer] Make sure a temporary object region matches its initial bindings.
authorJordan Rose <jordan_rose@apple.com>
Thu, 21 Feb 2013 23:57:17 +0000 (23:57 +0000)
committerJordan Rose <jordan_rose@apple.com>
Thu, 21 Feb 2013 23:57:17 +0000 (23:57 +0000)
commit9f1d541ef1aca8f953e5bb4e7177969f0a2062d5
treee0054aa29b2c5dff3f6ed9d98f5cd1065439f102
parent3892d022f36ee5bf3be4a55ea01c08d323ef6235
[analyzer] Make sure a temporary object region matches its initial bindings.

When creating a temporary region (say, when a struct rvalue is used as
the base of a member expr), make sure we account for any derived-to-base
casts. We don't actually record these in the LazyCompoundVal that
represents the rvalue, but we need to make sure that the temporary region
we're creating (a) matches the bindings, and (b) matches its expression.

Most of the time this will do exactly the same thing as before, but it
fixes spurious "garbage value" warnings introduced in r175234 by the use
of lazy bindings to model trivial copy constructors.

<rdar://problem/13265460>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175830 91177308-0d34-0410-b5e6-96231b3b80d8
lib/StaticAnalyzer/Core/ExprEngine.cpp
test/Analysis/temporaries.cpp