https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94355

William Navarre <navarre.gcc.bugs at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |navarre.gcc.bugs at gmail dot 
com

--- Comment #8 from William Navarre <navarre.gcc.bugs at gmail dot com> ---
It seems that `operator new` is generally not supposed to return NULL --
std::bad_alloc() is supposed to be thrown instead. 

I made that change on my build (see below). I think that treating new's result
as never-null is probably the correct thing to do most of the time, but two
considerations: 

1) The case of allocating a zero-length array. 

2) The case that a project has replaced `operator new.` (See "global
replacements" at https://en.cppreference.com/w/cpp/memory/new/operator_new). 

Apparently projects can replace `operator new` (see "global replacements" at
https://en.cppreference.com/w/cpp/memory/new/operator_new). It's not clear 

--- a/gcc-11.1.0/gcc/analyzer/sm-malloc.cc
+++ b/gcc-11.1.0.navarre/gcc/analyzer/sm-malloc.cc
@@ -1527,9 +1527,9 @@ malloc_state_machine::on_stmt (sm_context *sm_ctxt,
          }

        if (is_named_call_p (callee_fndecl, "operator new", call, 1))
-         on_allocator_call (sm_ctxt, call, &m_scalar_delete);
+        on_allocator_call (sm_ctxt, call, &m_scalar_delete, true);
        else if (is_named_call_p (callee_fndecl, "operator new []", call, 1))
-         on_allocator_call (sm_ctxt, call, &m_vector_delete);
+        on_allocator_call (sm_ctxt, call, &m_vector_delete, true);
        else if (is_named_call_p (callee_fndecl, "operator delete", call, 1)
                 || is_named_call_p (callee_fndecl, "operator delete", call,
2))
          {
  • [Bug analyzer/94355] suppor... navarre.gcc.bugs at gmail dot com via Gcc-bugs

Reply via email to