public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "mwinkler at blizzard dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/114245] Defaulted virtual destructors that do no work overwrite the vtable with `-O0`
Date: Wed, 06 Mar 2024 16:14:58 +0000	[thread overview]
Message-ID: <bug-114245-4-GpVx6dpL8I@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-114245-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114245

--- Comment #3 from Max Enrico Winkler <mwinkler at blizzard dot com> ---
> Yes this sounds like you are runing into what I have described as being undefined behavior.

Understood and agreed.

However this specific example is an object that effectively does no work on
destruction.
We would expect the object to be embedded in the binary and not rely on static
de-init order since there should be nothing running during destruction.

With `-O2` the vtable writes get dead store removed and the destructor ends up
being a full nop as expected.

Clang and MSVC have this behaviour and clang also provides more control with
the `no_destroy` attribute.

In general we didn't expect to have static de-init issues with an object of
this type since we didn't expect anything to be running during destruction.

We are aware of the various ways to work around static [de]-init issues but I
ultimately think GCC just shouldn't be overwriting vtables on destruction here.

If you guys think otherwise no worries we can work-around it.

  parent reply	other threads:[~2024-03-06 16:14 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-05 20:08 [Bug c++/114245] New: " mwinkler at blizzard dot com
2024-03-06  6:44 ` [Bug c++/114245] " pinskia at gcc dot gnu.org
2024-03-06  6:56 ` pinskia at gcc dot gnu.org
2024-03-06 16:14 ` mwinkler at blizzard dot com [this message]
2024-03-06 16:33 ` redi at gcc dot gnu.org
2024-03-06 16:38 ` jakub at gcc dot gnu.org
2024-05-28 22:17 ` pinskia at gcc dot gnu.org

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=bug-114245-4-GpVx6dpL8I@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /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).