Teach compute_objsize about placement new [PR100876].
authorMartin Sebor <msebor@redhat.com>
Mon, 14 Jun 2021 22:34:48 +0000 (16:34 -0600)
committerMartin Sebor <msebor@redhat.com>
Mon, 14 Jun 2021 22:48:42 +0000 (16:48 -0600)
commitd9f1466f88abef7c814d02ba39a6ea5ef420aaec
tree53117d901ee3c9d69128975777777ce05f14ec3d
parentf9598d89a9f5a327ecdfa6f6978a0cfbe4447111
Teach compute_objsize about placement new [PR100876].

Resolves:
PR c++/100876 - -Wmismatched-new-delete should understand placement new when it's not inlined

gcc/ChangeLog:

PR c++/100876
* builtins.c (gimple_call_return_array): Check for attribute fn spec.
Handle calls to placement new.
(ndecl_dealloc_argno): Avoid placement delete.

gcc/testsuite/ChangeLog:

PR c++/100876
* g++.dg/warn/Wmismatched-new-delete-4.C: New test.
* g++.dg/warn/Wmismatched-new-delete-5.C: New test.
* g++.dg/warn/Wstringop-overflow-7.C: New test.
* g++.dg/warn/Wfree-nonheap-object-6.C: New test.
* g++.dg/analyzer/placement-new.C: Prune out expected warning.
gcc/builtins.c
gcc/testsuite/g++.dg/analyzer/placement-new.C
gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-6.C [new file with mode: 0644]
gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-4.C [new file with mode: 0644]
gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-5.C [new file with mode: 0644]
gcc/testsuite/g++.dg/warn/Wstringop-overflow-7.C [new file with mode: 0644]