https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39170
--- Comment #18 from Florin Iucha <florin.iucha at amd dot com> --- Even this version creates a warning: #include <stdint.h> struct foo { unsigned bar: 30; unsigned fill: 2; }; struct foo test(uint32_t value) { struct foo foo; foo.bar = (value >> 2) & 0x3fffffffU; return foo; }