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

            Bug ID: 92023
           Summary: Miscompilation when inlining operator delete[]
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: bruno-gcc at defraine dot net
  Target Milestone: ---

Created attachment 47005
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47005&action=edit
Test case

Consider the example in attachment, where we use a toy allocator implemented in
custom operator new[] and operator delete[] functions.

When compiling this with `g++ -std=c++14 -O2 -Wall` and looking at the
disassembly of function "test", I'm surprised to find the operator delete[]
behavior has been completely removed from "test" ("test" ends with a tail call
to "use"...).

Godbolt link: https://godbolt.org/z/bpalzE

As far as I see, this behavior is new since gcc-7. With gcc-6 versions, the
behavior of operator delete[] is inlined at the end of test. If I disable
inlining with `-fno-inline`, all gcc versions seem to produce correct code
(i.e. two calls to operator delete[] at the end of "test").

Reply via email to