https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85030
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- void bar (int i) { struct S a; asm volatile ("" : "=rm" (a) : "0" (i)); } ICEs as well, but int baz (struct S a) { int i; asm volatile ("" : "=rm" (i) : "0" (a)); return i; } is properly rejected: pr85030-3.c: In function ‘baz’: pr85030-3.c:7:3: error: inconsistent operand constraints in an ‘asm’ asm volatile ("" : "=rm" (i) : "0" (a)); ^~~