From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id DB2F43858C54; Sat, 29 Apr 2023 19:31:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DB2F43858C54 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1682796660; bh=j1XktoF6/dk7OQ6lT0qL+gkHjW/Z8tvDUdffNPhgvL8=; h=From:To:Subject:Date:In-Reply-To:References:From; b=G6XRVJ+6m39rUEzhgDyvUCRaqC3sd+AbB0loaJ6LhdNy2jbvlW3pnlSowpwGhPame 0WSotrZJSOB5KtvD67yV5+E7sLETyXTk8Ax9BGFR/A1QDID4H0B84GnCb34a52tkmf x5H1nX37ESYW9yFH59YIeURmZ1yN8ffYlunYWBLM= From: "cdfrey at foursquare dot net" To: gcc-bugs@gcc.gnu.org Subject: [Bug middle-end/103993] -Wismatched-new-delete due to difference in inlining decisions Date: Sat, 29 Apr 2023 19:30:59 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: middle-end X-Bugzilla-Version: 11.2.1 X-Bugzilla-Keywords: diagnostic X-Bugzilla-Severity: normal X-Bugzilla-Who: cdfrey at foursquare dot net X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cc Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D103993 cdfrey at foursquare dot net changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |cdfrey at foursquare dot n= et --- Comment #5 from cdfrey at foursquare dot net --- This happens for me. Here is a test case, for gcc 13.1.0, which gives the warning with this command: /home/gcc/rootdir/gcc-13.1.0/bin/g++ -Wall -O2 --std=3Dc++17 -Wall -Wextra -Werror -fmax-errors=3D4 -c -o gcc-test-case.o gcc-test-case.cc gcc-test-case.cc: In function =E2=80=98int main()=E2=80=99: gcc-test-case.cc:49:16: error: =E2=80=98static void Test::operator delete(v= oid*)=E2=80=99 called on pointer returned from a mismatched allocation function [-Werror=3Dmismatched-new-delete] 49 | delete t; | ^ In static member function =E2=80=98static void* Test::operator new(size_t)= =E2=80=99, inlined from =E2=80=98int main()=E2=80=99 at gcc-test-case.cc:48:10: gcc-test-case.cc:17:30: note: returned from =E2=80=98void* malloc(size_t)= =E2=80=99 17 | return malloc(size); | ~~~~~~^~~~~~ gcc-test-case.cc: In function =E2=80=98int main()=E2=80=99: gcc-test-case.cc:48:17: error: =E2=80=98static void Test::operator delete(v= oid*)=E2=80=99 called on pointer returned from a mismatched allocation function [-Werror=3Dmismatched-new-delete] 48 | t =3D new Test; | ^~~~ In static member function =E2=80=98static void* Test::operator new(size_t)= =E2=80=99, inlined from =E2=80=98int main()=E2=80=99 at gcc-test-case.cc:48:10: gcc-test-case.cc:17:30: note: returned from =E2=80=98void* malloc(size_t)= =E2=80=99 17 | return malloc(size); | ~~~~~~^~~~~~ cc1plus: all warnings being treated as errors make: *** [: gcc-test-case.o] Error 1 The code: #include // cout statements needed to trigger warning #include #include using namespace std; struct Test { double a, b, c; Test() { cout << "Test::Test()\n"; } void* operator new(size_t size) { cout << "Test::operator new(" << size << ")\n"; return malloc(size); } void* operator new(size_t size, align_val_t al) { cout << "Test::operator new(" << size << ", align: " << (size_t)al << ")\n"; return aligned_alloc((size_t)al, size); } void* operator new(size_t size, const std::nothrow_t &) throw() { cout << "Test::operator new(" << size << ", nothrow)\n"; return malloc(size); } void operator delete(void *p) { cout << "Test::operator delete()\n"; free(p); } void operator delete(void *p, align_val_t al) { cout << "Test::operator delete(p, align: " << (size_t)al << ")\n"; free(p); } }; int main(void) { Test *t; t =3D new Test; delete t; }=