[PATCH] teach compute_objsize about placement new (PR 100876)
Christophe Lyon
christophe.lyon@linaro.org
Tue Jun 15 10:58:12 GMT 2021
Hi,
On Tue, 15 Jun 2021 at 00:58, Martin Sebor via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> On 6/2/21 3:46 PM, Marek Polacek wrote:
> > On Wed, Jun 02, 2021 at 03:40:49PM -0600, Martin Sebor via Gcc-patches wrote:
> >> + if (!gimple_call_builtin_p (stmt, BUILT_IN_NORMAL))
> >> + {
> >> + /* See if this is a call to placement new. */
> >> + if (!fn
> >> + || !DECL_IS_OPERATOR_NEW_P (fn)
> >> + || DECL_IS_REPLACEABLE_OPERATOR_NEW_P (fn))
> >> + return NULL_TREE;
> >> +
> >> + tree fname = DECL_ASSEMBLER_NAME (fn);
> >> + const char *name = IDENTIFIER_POINTER (fname);
> >> + if (strcmp (name, "_ZnwmPv") // ordinary form
> >> + && strcmp (name, "_ZnamPv")) // array form
> >> + return NULL_TREE;
> >
> > Not a review, but you can use id_equal here and simplify things.
>
> Okay, done.
>
On arm the new test Wmismatched-new-delete-4.C fails:
/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-4.C: In function
'void nowarn_placement_new()':
/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-4.C:16:8: warning:
'void free(void*)' called on pointer returned from a mismatched
allocation function [-Wmismatched-new-delete]
/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-4.C:16:42: note:
returned from 'void* operator new(unsigned int, void*)'
/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-4.C: In function
'void nowarn_placement_array_new()':
/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-4.C:21:8: warning:
'void free(void*)' called on pointer returned from a mismatched
allocation function [-Wmismatched-new-delete]
/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-4.C:21:8: note:
returned from 'void* operator new [](unsigned int, void*)'
FAIL: g++.dg/warn/Wmismatched-new-delete-4.C -std=gnu++98 (test for
bogus messages, line 16)
FAIL: g++.dg/warn/Wmismatched-new-delete-4.C -std=gnu++98 (test for
bogus messages, line 21)
FAIL: g++.dg/warn/Wmismatched-new-delete-4.C -std=gnu++98 (test for
warnings, line 29)
FAIL: g++.dg/warn/Wmismatched-new-delete-4.C -std=gnu++98 (test for
warnings, line 36)
and Wstringop-overflow-7.C:
FAIL: g++.dg/warn/Wstringop-overflow-7.C -std=gnu++98 (test for
warnings, line 23)
FAIL: g++.dg/warn/Wstringop-overflow-7.C -std=gnu++98 (test for
warnings, line 40)
PASS: g++.dg/warn/Wstringop-overflow-7.C -std=gnu++98 (test for excess errors)
(no warning emitted)
Can you check?
Thanks,
Christophe
> Thanks
> Martin
More information about the Gcc-patches
mailing list