pr22591.c
来自「Mac OS X 10.4.9 for x86 Source Code gcc」· C语言 代码 · 共 59 行
C
59 行
/* APPLE LOCAL file mainline 4.0.2 4203511 *//* { dg-do run } *//* APPLE LOCAL darwin needs -fstrict-aliasing *//* { dg-options "-O2 -fstrict-aliasing" } */void abort (); typedef struct _Node { struct _Node *next, *prev; } Node; void __attribute__ ((noinline)) append (Node * q, Node * p) { p->next = q; p->prev = q; q->next = p; q->prev = p; } inline void swap (Node ** a, Node ** b) { Node *tmp = *a; *a = *b; *b = tmp; } /* Miscompilation seems to happen here. If one removes the if condition (which should be true) the program works fine. */ void ListSwap (Node * x, Node * y) { Node *tmp; if (x->next) { swap (&x->next, &y->next); swap (&x->prev, &y->prev); x->next->prev = x->prev->next = x; y->next->prev = y->prev->next = y; } } int main () { Node A, A1, B, B1; append (&A, &A1); append (&B, &B1); ListSwap (&A, &B); if (&A != A.next->prev) abort (); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?