https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114986
--- Comment #2 from TC <rs2740 at gmail dot com> ---
It seems like what it does is that it ignores the attribute's effect on the
specific member, but still applies it on the other members. Consider:
struct Short { short x = {}; };
struct __attribute__((packed)) Y
{
char a;
Short b;
char c;
int d;
};
static_assert( offsetof(Y, b) == 2 );
static_assert( offsetof(Y, c) == 4 );
static_assert( offsetof(Y, d) == 5 );
static_assert( sizeof(Y) == 10 );
static_assert( alignof(Y) == 2 );
The packed attribute is ignored as to b, so we get 1 byte of padding after `a`,
but it's still applied to d so there's no padding after c; then because of b we
need one byte of padding at the end of the struct.
In the original test case, alignof(uuid) is 1 anyway so ignoring the attribute
is basically a no-op. It might be a good idea to suppress the warning in that
case?