public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "jakub at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug tree-optimization/102586] [12 Regression] ICE in clear_padding_type, at gimple-fold.c:4798 since r12-3433-ga25e0b5e6ac8a77a
Date: Mon, 04 Oct 2021 11:43:22 +0000	[thread overview]
Message-ID: <bug-102586-4-ub9C8kBCgN@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-102586-4@http.gcc.gnu.org/bugzilla/>

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jason at gcc dot gnu.org,
                   |                            |ppalka at gcc dot gnu.org

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So, seems the C9 type is 32-byte, with 8-byte virtual table pointers at offset
0 and 16 bytes (and the rest is padding), C5 is 24-byte with virtual table
pointers at offsets 0 and 8 bytes (and the rest is padding), C4 is 16-byte with
virtual table pointers at offset 0 (and the rest is padding).
But what the middle-end sees is that there is a FIELD_DECL with C5 type at
offset 0 with size 9 bytes and then a FIELD_DECL with C4 type at offset 16 with
size 9 bytes.
The __builtin_clear_padding handling code when called on a FIELD_DECL with
smaller DECL_SIZE_UNIT than TYPE_SIZE_UNIT is able to ignore fields that are
wholy beyond the size and also the default behavior is that everything is
padding until proven otherwise, so for padding bytes nothing changes.
The reason for the ICE is that the first FIELD_DECL with C5 type says 9 bytes
and the type has 8 byte, 8 byte and 1 byte fields (2 virtual table pointers and
one padding byte).  So, in that case it is unclear what the code should do.
Shall it treat the fields that partially fall into the range and partially
don't as padding (ignore them), or is there no way to do this using the
TREE_TYPE of FIELD_DECLs that the middle-end sees and one needs to use some
other types (I vaguely remember the C++ FE has some variant RECORD_TYPEs for
the virtual bases that actually reflect what is present and where, but I have
no idea if that is visible to the middle-end somewhere)?

  parent reply	other threads:[~2021-10-04 11:43 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-04  7:30 [Bug tree-optimization/102586] New: " marxin at gcc dot gnu.org
2021-10-04  7:30 ` [Bug tree-optimization/102586] " marxin at gcc dot gnu.org
2021-10-04  8:21 ` jakub at gcc dot gnu.org
2021-10-04  8:22 ` marxin at gcc dot gnu.org
2021-10-04 11:43 ` jakub at gcc dot gnu.org [this message]
2021-10-04 12:04 ` jakub at gcc dot gnu.org
2021-11-15 13:03 ` jakub at gcc dot gnu.org
2021-11-15 13:05 ` jakub at gcc dot gnu.org
2022-01-17 13:14 ` rguenth at gcc dot gnu.org
2022-02-09 17:21 ` jason at gcc dot gnu.org
2022-02-10 14:08 ` jakub at gcc dot gnu.org
2022-02-10 14:18 ` jakub at gcc dot gnu.org
2022-02-10 15:29 ` jakub at gcc dot gnu.org
2022-02-10 15:35 ` jakub at gcc dot gnu.org
2022-02-10 15:56 ` jason at gcc dot gnu.org
2022-02-10 18:30 ` jakub at gcc dot gnu.org
2022-02-10 18:45 ` jason at gcc dot gnu.org
2022-02-10 19:27 ` jakub at gcc dot gnu.org
2022-02-10 22:07 ` jason at gcc dot gnu.org
2022-02-10 22:27 ` jakub at gcc dot gnu.org
2022-02-10 22:29 ` jakub at gcc dot gnu.org
2022-02-10 22:34 ` jakub at gcc dot gnu.org
2022-02-11  1:47 ` rodgertq at gcc dot gnu.org
2022-02-11 12:31 ` jakub at gcc dot gnu.org
2022-02-11 15:29 ` jason at gcc dot gnu.org
2022-02-11 16:23 ` qing.zhao at oracle dot com
2022-02-11 16:39 ` jakub at gcc dot gnu.org
2022-02-11 17:36 ` qinzhao at gcc dot gnu.org
2022-02-11 17:47 ` jakub at gcc dot gnu.org
2022-02-11 21:52 ` qing.zhao at oracle dot com
2022-03-12  4:40 ` jason at gcc dot gnu.org
2022-03-14  9:49 ` cvs-commit at gcc dot gnu.org
2022-04-07  7:15 ` cvs-commit at gcc dot gnu.org
2022-04-07  7:19 ` jakub 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-102586-4-ub9C8kBCgN@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).