From: Jason Merrill <jason@redhat.com>
To: Richard Biener <richard.guenther@gmail.com>
Cc: Jan Hubicka <hubicka@ucw.cz>,
GCC Patches <gcc-patches@gcc.gnu.org>,
Marc Glisse <marc.glisse@inria.fr>
Subject: Re: [PATCH] Check DECL_CONTEXT of new/delete operators.
Date: Mon, 6 Apr 2020 11:10:02 -0400 [thread overview]
Message-ID: <CADzB+2ni26OPOQ753afFL+8gD0W93AqSBC25jFtFZb-YR-OTaw@mail.gmail.com> (raw)
In-Reply-To: <CAFiYyc3U8B1Gi8mbuMCjureFGvv+JgJsi1uuOBEhEarNN-k5OQ@mail.gmail.com>
On Mon, Apr 6, 2020 at 5:27 AM Richard Biener via Gcc-patches <
gcc-patches@gcc.gnu.org> wrote:
> On Sat, Apr 4, 2020 at 1:53 PM Jan Hubicka <hubicka@ucw.cz> wrote:
> >
> > Hi,
> > thinking a bit of the problem, I guess we could match in addition to
> > DECL_CONTEXT the whole inline stack of both statements and see if there
> > are inlined new/delete operators and if so if they are always in
> > matching pairs.
> >
> > The inline stack is available as
> > for (tree block = gimple_block (call); block && TREE_CODE (block) ==
> BLOCK; block = BLOCK_SUPERCONTEXT (block))
> > {
> > tree fn = block_ultimate_origin (block);
> > if (fn != NULL && TREE_CODE (fn) == FUNCTION_DECL)
> > do the checking htere.
> > }
> >
> > But I do not understand what C++ promises here and in what conditions
> > the new/delete pair can be removed.
>
> But if the inline stack matches in pairs then the ultimate new/delete
> call should also
> match, no? When there's a mismatch in inlining we can't DCE since we
> can't remove
> the extra inlined stmts.
>
> Your failing testcase suggests we never can remove new/delete pairs though
> unless the DECL_CONTEXT is 'final'. Also the user could have chosen to
> "inline" the side-effect of the new operation manually but not the
> delete one, so
>
> operator delete() { count-- }
>
> ptr = new A;
> count++;
> delete ptr;
>
> is it valid to elide the new/delete pair here?
>
The C++ constraints are (deliberately, I think) vague. As Nathan quotes,
it just says that a call to a replaceable operator new can be omitted, and
that if it is, the matching delete-expression should not call operator
delete. This example seems to demonstrate that we should also only
consider the replaceable delete operators, not any operator delete.
Jason
next prev parent reply other threads:[~2020-04-06 15:10 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-30 8:40 Martin Liška
2020-03-30 8:53 ` Richard Biener
2020-03-31 12:29 ` Jan Hubicka
2020-03-31 12:38 ` Martin Liška
2020-04-03 15:26 ` Jan Hubicka
2020-04-03 15:42 ` Jan Hubicka
2020-04-04 11:53 ` Jan Hubicka
2020-04-06 9:27 ` Richard Biener
2020-04-06 15:10 ` Jason Merrill [this message]
2020-04-06 8:34 ` Martin Liška
2020-04-06 12:45 ` Nathan Sidwell
2020-04-07 8:26 ` Jonathan Wakely
2020-04-07 9:29 ` Richard Biener
2020-04-07 9:49 ` Jan Hubicka
2020-04-07 10:22 ` Richard Biener
2020-04-07 10:42 ` Martin Liška
2020-04-07 11:41 ` Jonathan Wakely
2020-04-07 10:46 ` Martin Liška
2020-04-07 11:29 ` Jonathan Wakely
2020-04-07 11:40 ` Richard Biener
2020-04-07 11:46 ` Jonathan Wakely
2020-04-07 11:57 ` Richard Biener
2020-04-07 15:00 ` [PATCH] Allow new/delete operator deletion only for replaceable Martin Liška
2020-04-08 8:47 ` Richard Biener
2020-04-08 13:20 ` Jason Merrill
2020-04-08 13:32 ` Jakub Jelinek
2020-04-08 13:34 ` Jason Merrill
2020-04-08 15:16 ` Martin Liška
2020-04-08 15:46 ` Jan Hubicka
2020-04-08 16:06 ` Jakub Jelinek
2020-04-09 5:05 ` Martin Liška
2020-04-09 6:45 ` Richard Biener
2020-04-09 6:59 ` Martin Liška
2020-04-09 7:21 ` Richard Biener
2020-04-09 7:55 ` Jakub Jelinek
2020-04-09 8:04 ` Marc Glisse
2020-04-09 8:13 ` Jonathan Wakely
2020-04-10 8:08 ` Martin Liška
2020-04-10 8:18 ` Jonathan Wakely
2020-04-10 8:29 ` Martin Liška
2020-04-10 9:17 ` Jakub Jelinek
2020-04-14 7:09 ` Martin Liška
2020-04-14 7:11 ` Martin Liška
2020-04-14 8:37 ` Jakub Jelinek
2020-04-14 10:54 ` Martin Liška
2020-04-17 7:05 ` Jakub Jelinek
2020-04-17 8:12 ` Jonathan Wakely
2020-04-10 8:37 ` Marc Glisse
2020-04-10 9:11 ` Iain Sandoe
2020-04-09 16:55 ` Jason Merrill
2020-04-07 15:16 ` [PATCH] Check DECL_CONTEXT of new/delete operators Jonathan Wakely
2020-04-08 7:34 ` Richard Biener
2020-04-08 8:11 ` Jonathan Wakely
2020-04-07 14:11 ` Nathan Sidwell
2020-03-30 9:29 ` Marc Glisse
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CADzB+2ni26OPOQ753afFL+8gD0W93AqSBC25jFtFZb-YR-OTaw@mail.gmail.com \
--to=jason@redhat.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=hubicka@ucw.cz \
--cc=marc.glisse@inria.fr \
--cc=richard.guenther@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).