[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