https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87690
--- Comment #1 from Alex Bradbury <asb at lowrisc dot org> --- It's clear from the example but I made a typo in the explanation due to a last minute change in my example. char is unsigned, so the value in char_struct is zero-extended as we expect.