]> granicus.if.org Git - clang/commit
[analyzer] For now, treat pointers-to-members as non-null void * symbols.
authorJordan Rose <jordan_rose@apple.com>
Thu, 23 Aug 2012 23:01:43 +0000 (23:01 +0000)
committerJordan Rose <jordan_rose@apple.com>
Thu, 23 Aug 2012 23:01:43 +0000 (23:01 +0000)
commit0156439a3d718ea0ef5922c38d189a60829c8a86
tree2a4d15e48b95aabcffb2eedfc64c8c9376bba93c
parentc386d8f148c1a9d4992c64188e2873fcbc6da20d
[analyzer] For now, treat pointers-to-members as non-null void * symbols.

Until we have full support for pointers-to-members, we can at least
approximate some of their use by tracking null and non-null values.
We thus treat &A::m_ptr as a non-null void * symbol, and MemberPointer(0)
as a pointer-sized null constant.

This enables support for what is sometimes called the "safe bool" idiom,
demonstrated in the test case.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162495 91177308-0d34-0410-b5e6-96231b3b80d8
lib/StaticAnalyzer/Core/ExprEngine.cpp
lib/StaticAnalyzer/Core/ExprEngineC.cpp
test/Analysis/pointer-to-member.cpp [new file with mode: 0644]