Баг в gcc? swap через ^=
вот, здесь по честному:
#include <stdio.h>
#define swap(a,b) (a)^=(b)^=(a)^=(b)
int main()
{
int n1, n2;
int *p1, *p2;
p1=&n1;
p2=&n2;
scanf("%d%d",&n1,&n2);
printf("%d %d\n",*p1,*p2);
swap(*p1,*p2); printf("%d %d\n", *p1,*p2);
return 0;
}
...
movl 12(%rsp), %ecx
movl 8(%rsp), %edx
movl $.LC1, %esi
movl $1, %edi
xorl %eax, %eax
xorl %ecx, %edx
xorl %edx, %ecx
xorl %ecx, %edx
movl %ecx, 12(%rsp)
movl %edx, 8(%rsp)
call __printf_chk
...
А почему баг?
я пока забил курить ассемблерный листинг, пошёл обедать
А, ок.
Оставить комментарий
yolki
хм.. с -O2 работает нормально
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
gcc (Gentoo 4.8.4 p1.0, pie-0.6.1) 4.8.4