https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117642
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Anyway, for the docs I don't believe this is a regression, at least long long l; void bar (void); void foo (void) { __sync_lock_test_and_set (&l, 1); bar (); __sync_lock_release (&l); } gcc -m32 -march=i486 behaved similarly in GCC 4.1 (silently emitting call to __sync_lock_test_and_set_8 and incorrectly emitting non-atomic store of 0 zeros to each of the halves). GCC 3.2/3.4/4.0 didn't support those builtins at all.