https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101836
Bug ID: 101836 Summary: __builtin_object_size(P->M, 1) where M is an array and the last member of a struct fails Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: kees at outflux dot net Target Milestone: --- Created attachment 51282 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=51282&action=edit struct layout changes bos1 behavior When bos1 is used on a member who is both an array and at the end of a structure, it fails to correctly resolve. This kind of behavior should only happen for flexible array members: struct trailing_array { int a; int b; unsigned char c[16]; }; struct middle_array { int a; unsigned char c[16]; int b; }; ok: sizeof(*working) == 24 ok: sizeof(working->c) == 16 ok: __builtin_object_size(working, 1) == -1 ok: __builtin_object_size(working->c, 1) == 16 ok: sizeof(*broken) == 24 ok: sizeof(broken->c) == 16 ok: __builtin_object_size(broken, 1) == -1 WAT: __builtin_object_size(broken->c, 1) == -1 (expected 16)