[analyzer] Assume 'new' never returns NULL if it could throw an exception.
authorJordan Rose <jordan_rose@apple.com>
Sat, 20 Oct 2012 02:32:51 +0000 (02:32 +0000)
committerJordan Rose <jordan_rose@apple.com>
Sat, 20 Oct 2012 02:32:51 +0000 (02:32 +0000)
commit3957fd5858e258c340d03a71eb617929a8262b9f
tree3a912a668f72629fe0ac37a9ea6190613bdcc128
parent8f688177388a1aa20dbce0d76f6ea73b2830f243
[analyzer] Assume 'new' never returns NULL if it could throw an exception.

This is actually required by the C++ standard in
[basic.stc.dynamic.allocation]p3:

  If an allocation function declared with a non-throwing
  exception-specification fails to allocate storage, it shall return a
  null pointer. Any other allocation function that fails to allocate
  storage shall indicate failure only by throwing an exception of a type
  that would match a handler of type std::bad_alloc.

We don't bother checking for the specific exception type, but just go off
the operator new prototype. This should help with a certain class of lazy
initalization false positives.

<rdar://problem/12115221>

llvm-svn: 166363
clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp
clang/test/Analysis/new-with-exceptions.cpp [new file with mode: 0644]