__code checkAndSetAtomicReference(struct AtomicReference* atomic, union Data** ptr, union Data* oldData, union Data* newData, __code next(...), __code fail(...)) { if (__sync_bool_compare_and_swap(ptr, oldData, newData)) { goto next(...); } goto fail(...); }