https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95418
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Looks like: unsigned short int __cs_selector; - unsigned short int __opcode; + unsigned int __opcode:11; + unsigned int __unused4:5; For Windows ABI, the int causes the bitfield to start at the next 4byte alignment. Unlike Linux ABI. I suspect using unsigned short will fix the issue. NOTE clang might not implement the correct Windows ABI.