fold-const: Fix up native_encode_initializer missing field handling [PR98193]
authorJakub Jelinek <jakub@redhat.com>
Wed, 9 Dec 2020 08:34:51 +0000 (09:34 +0100)
committerJakub Jelinek <jakub@redhat.com>
Wed, 9 Dec 2020 08:34:51 +0000 (09:34 +0100)
commit4164e58bfd5d57e7399f91c7c27ae6ccebc7dcb0
treee9f70fb13606ba8e2fead253f67b67e68dbd85d0
parentc3a63fb3854392af65a191154e3586e7f5a1066e
fold-const: Fix up native_encode_initializer missing field handling [PR98193]

When native_encode_initializer is called with non-NULL mask (i.e. ATM
bit_cast only), it checks if the current index in the CONSTRUCTOR (if any)
is the next initializable FIELD_DECL, and if not, decrements cnt and
performs the iteration with that FIELD_DECL as field and val of zero
(so that it computes mask properly).  As the testcase shows, I forgot to
set pos to the byte position of the field though (like it is done
for e.g. index referenced FIELD_DECLs in the constructor.

2020-12-09  Jakub Jelinek  <jakub@redhat.com>

PR c++/98193
* fold-const.c (native_encode_initializer): Set pos to field's
byte position if iterating over a field with missing initializer.

* g++.dg/cpp2a/bit-cast7.C: New test.
gcc/fold-const.c
gcc/testsuite/g++.dg/cpp2a/bit-cast7.C [new file with mode: 0644]