gimple-fold: Fix another __builtin_clear_padding ICE
authorJakub Jelinek <jakub@redhat.com>
Fri, 27 Nov 2020 10:23:45 +0000 (11:23 +0100)
committerJakub Jelinek <jakub@redhat.com>
Fri, 27 Nov 2020 10:25:10 +0000 (11:25 +0100)
commitbf0a63a1f47525d1c466dbb84616dcb72010affa
treeb78eed14726ad5e61976e8660ed6d759f8ec3d8f
parentf324479caf0ac326534f4fcf72cb12991ccddb3d
gimple-fold: Fix another __builtin_clear_padding ICE

When playing with __builtin_bit_cast, I have noticed __builtin_clear_padding
ICE on the G class below.  The artificial field with D type has offset 0
and size 8 bytes, but the following artificial field with E type has offset
0 and size 0, so it triggers the asserts that we don't move current position
backwards.  Fixed by ignoring is_empty_type (TREE_TYPE (field)) fields, all
of their bits are padding which is what is added when skipping over to next
field anyway.

2020-11-27  Jakub Jelinek  <jakub@redhat.com>

PR libstdc++/88101
* gimple-fold.c (clear_padding_type): Ignore fields with is_empty_type
types.

* g++.dg/torture/builtin-clear-padding-3.C: New test.
gcc/gimple-fold.c
gcc/testsuite/g++.dg/torture/builtin-clear-padding-3.C [new file with mode: 0644]