[analyzer] Don't look through casts when creating pointer temporaries.
authorJordan Rose <jordan_rose@apple.com>
Tue, 26 Feb 2013 01:21:27 +0000 (01:21 +0000)
committerJordan Rose <jordan_rose@apple.com>
Tue, 26 Feb 2013 01:21:27 +0000 (01:21 +0000)
commit861a174018bb7c68076a4d2df241186fb0331d70
treec174a24040f9f1838dc8778c82793fac0e8b5a41
parentc948709cda56a76cea07357db29c288235baa0ba
[analyzer] Don't look through casts when creating pointer temporaries.

Normally, we need to look through derived-to-base casts when creating
temporary object regions (added in r175854). However, if the temporary
is a pointer (rather than a struct/class instance), we need to /preserve/
the base casts that have been applied.

This also ensures that we really do create a new temporary region when
we need to: MaterializeTemporaryExpr and lvalue CXXDefaultArgExprs.

Fixes PR15342, although the test case doesn't include the crash because
I couldn't isolate it.

llvm-svn: 176069
clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp
clang/test/Analysis/temporaries.cpp