История изменений
Исправление wandrien, (текущая версия) :
int v[2], * p0 = v, * _Atomic p1 = v;
...
if (++p0 != ++p1) return 2;
Ты уже объявил p1 как atomic, и вот этот инкремент компилируется в это:
movl $4, %eax
lock xaddq %rax, 8(%rsp)
Непонятно, чего ты еще хочешь добиться. atomic_fetch_add_explicit
не определён сишкой для указателей, только для целых. По арифметике целых он и складывает.
Исходная версия wandrien, :
int v[2], * p0 = v, * _Atomic p1 = v;
...
if (++p0 != ++p1) return 2;
Ты уже объявил p1 как atomic, и вот этот инкремент компилируется в это:
movl $4, %eax
lock xaddq %rax, 8(%rsp)
Непонятно, чего ты еще хочешь добиться. atomic_fetch_add_explicit
не определён сишкой для указателей, только для целых. По арифметике целы он и складывает.