]> granicus.if.org Git - clang/commit
[analyzer] If we call a C++ method on an object, assume it's non-null.
authorJordan Rose <jordan_rose@apple.com>
Wed, 15 Aug 2012 21:56:23 +0000 (21:56 +0000)
committerJordan Rose <jordan_rose@apple.com>
Wed, 15 Aug 2012 21:56:23 +0000 (21:56 +0000)
commit7f660857309a14c036a80ef90b40bf8f68fda9da
treece02b420c45ce45f255370f25e56f4478e88d3fa
parentb5f9eb8a0709082bba8e8de3a6c643928570aaa0
[analyzer] If we call a C++ method on an object, assume it's non-null.

This is analogous to our handling of pointer dereferences: if we
dereference a pointer that may or may not be null, we assume it's non-null
from then on.

While some implementations of C++ (including ours) allow you to call a
non-virtual method through a null pointer of object type, it is technically
disallowed by the C++ standard, and should not prune out any real paths in
practice.

  [class.mfct.non-static]p1: A non-static member function may be called
    for an object of its class type, or for an object of a class derived
    from its class type...
  (a null pointer value does not refer to an object)

We can also make the same assumption about function pointers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161992 91177308-0d34-0410-b5e6-96231b3b80d8
lib/StaticAnalyzer/Checkers/CallAndMessageChecker.cpp
test/Analysis/func.c
test/Analysis/method-call.cpp