On Wed, Apr 22, 2020 at 12:17:02PM +0100, Richard Sandiford wrote:
> But my point was that, if the DECL_NAME does actually act to exclude
I'm fine with dropping DECL_NAME test there, on the other side would like to
add
&& TYPE_SIZE (TREE_TYPE (field))
&& !integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
in there because that is what all these empty bases should satisfy too.
If the predicate says that it is the C++17 empty base field, then it better
should be a narrow check.
Now, in the backend, one has the -Wpsabi diagnostics that also talks about
C++17, so I think it is better to use that predicate in there.
But, what one could do is verify that all other
if (DECL_SIZE (field) && integer_zerop (DECL_SIZE (field)))
fields don't matter for the ABI decisions.
So
if (TREE_CODE (field) != FIELD_DECL)
continue;
if (cxx17_empty_base_field_p (field))
{
/* hint -Wpsabi warning here somehow. */
continue;
}
sub_count = aapcs_vfp_sub_candidate (TREE_TYPE (field), modep);
/* Verify that other zero sized fields don't affect the
ABI decisions. */
if (DECL_SIZE (field) && integer_zerop (DECL_SIZE (field)))
gcc_assert (sub_count == 0);
if (sub_count < 0)
return -1;
count += sub_count;
?
Jakub