On Wed, 3 Jul 2019, Richard Biener wrote:
On July 3, 2019 4:53:30 PM GMT+02:00, "Martin Liška" <mli...@suse.cz> wrote:
On 7/2/19 7:15 PM, Marc Glisse wrote:
On Tue, 2 Jul 2019, Martin Liška wrote:
After the discussion with Richi and Nathan, I made a place in
tree_function_decl
and I rebased the original Dominik's patch on top of that.
So, last time there were some questions about the legality of this
transformation. Did you change the exact set of functions on which this
is applied?
Yes. I was not included in the original discussion, but I hope the
transformation is valid.
Btw. clang also removes the new/delete pairs and I guess it was the
original motivation of the patch.
We also remove malloc/free pairs which the C standard does not explicitly allow
(but also doesn't explicitly forbid). I don't think standards need to enumerate
everything allowed and I don't know any explicit wording in the C++ standard
that forbids this.
The C++ standard has explicit wording allowing to remove new-delete pairs
in some circumstances (expr.new, allocator.members), so I would assume
that other circumstances are forbidden (not that I care much, I am just
afraid someone might).
The patch apparently has DECL_IS_OPERATOR_DELETE only on the replaceable
global deallocation functions, not all delete operators, contrary to
DECL_IS_OPERATOR_NEW, so the name is misleading. On the other hand, those
seem to be the ones for which the optimization is legal (well, not quite,
the rules are in terms of operator new, and I am not sure how well
operator delete has to match, but close enough).
It's only that users can override the allocation functions (but so can
they in C) and it was suggested we need to preserve side effects unknown
to the compiler.
--
Marc Glisse