https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100804
Eric Botcazou <ebotcazou at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |ebotcazou at gcc dot gnu.org
--- Comment #3 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
> - In my example the new warning fires on a struct only having chars. I don't
> see how that is applicable here or how a char array could have a different
> storage order in either big or little endian.
The scalar storage order is a binary property of structures and unions, i.e.
it's either little- or big-endian and there is no third state.
> - Regardless of that fact. That field is also never accessed in my example
> code
> Al 2 fields of the structs actually read are consistently be (in)
> and the one written is (out) le. The ones compare are of the same type.
What the restriction says is that every single scalar in memory must *always*
be accessible with the same storage order in the entire program; if there are
two possible accesses with different storage order, even if not executed, then
the behavior is undefined. That's clearly the case for:
union _be_data {
int val;
t_str str;
} BE;
since t_str has little-endian scalar storage order.