https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85927
--- Comment #2 from Nick Desaulniers <ndesaulniers at google dot com> --- Sorry, probably: __attribute__((naked)) unsigned long save_flags4(void) { asm volatile("pushf; pop %rax;ret;"); } is a better example: 0000000000000000 <save_flags4>: 0: 9c pushfq 1: 58 pop %rax 2: c3 retq 3: 0f 0b ud2 (gcc-7 replaces ud2 with another ret, but I guess both should work in practice).