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

            Bug ID: 113113
           Summary: False -Wmismatched-new-delete in case of destroying
                    operator delete
           Product: gcc
           Version: 13.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fchelnokov at gmail dot com
  Target Milestone: ---

Consider the program as follows:


#include <new>

struct Shape {
    void operator delete(Shape *, std::destroying_delete_t);
};

struct Triangle : Shape {};

void Shape::operator delete(Shape *p, std::destroying_delete_t) {
    static_cast<Triangle *>(p)->~Triangle();
    ::operator delete(p);
}

int main() {
    Shape *p = new Triangle;
    delete p;
}


GCC issues presumably false

warning: 'static void Shape::operator delete(Shape*, std::destroying_delete_t)'
called on pointer returned from a mismatched allocation function
[-Wmismatched-new-delete]

for this program as well as for longer original one from
https://stackoverflow.com/a/67595790/7325599

Online demo: https://godbolt.org/z/Pfc4PaGbd

Reply via email to