LINUX.ORG.RU

История изменений

Исправление 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 не определён сишкой для указателей, только для целых. По арифметике целы он и складывает.