A testcase to trigger the assert was:

typedef _Bool Tal16bool __attribute__ ((aligned (16)));
struct S49
{
 Tal16bool a:1;
};

and it turns out that the underlying problem is actually in the general-purpose
field layout code. Both known_align and actual_align are calculated as
BIGGEST_ALIGNMENT if the offset of the field is zero. However, the
correct alignment in this case is the alignment of the record, which may be
smaller or larger than BIGGEST_ALIGNMENT, depending on the
alignment of the fields seen so far.




Reply via email to