https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103194
Hongtao.liu <crazylht at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #8 from Hongtao.liu <crazylht at gmail dot com> --- unsigned long pscc_a_2_3; int pscc_a_1_4; unsigned long pc2; void pscc(int n) { long mask = 1ll << n; pc2 = __sync_fetch_and_or(&pscc_a_2_3, mask) & mask; } void pscc1(int n) { long mask = 1ll << 65; pc2 = __sync_fetch_and_or(&pscc_a_2_3, mask) & mask; } pscc and pscc1 have different behavior when n >= 64, It seems unsafe to optimize variable mask?