/* PR rtl-optimization/88904 */ volatile int v; __attribute__((noipa)) void bar (const char *x, const char *y, int z) { if (!v) __builtin_abort (); asm volatile ("" : "+g" (x)); asm volatile ("" : "+g" (y)); asm volatile ("" : "+g" (z)); } #define my_assert(e) ((e) ? (void) 0 : bar (#e, __FILE__, __LINE__)) typedef struct { unsigned M1; unsigned M2 : 1; int : 0; unsigned M3 : 1; } S; S foo () { S result = {0, 0, 1}; return result; } int main () { S ret = foo (); my_assert (ret.M2 == 0); my_assert (ret.M3 == 1); return 0; }