Description of Problem: ld assertion failure on ia64. Version-Release number of selected component (if applicable): 2.11.92.0.12-9 How Reproducible: 100% Steps to Reproduce: 1. Build sane-backends on ia64. Actual Results: See log file in ~twaugh/sane-backends-ia64.log. There are lots of lines like: /usr/bin/ld: BFD 2.11.92.0.12 20011121 assertion fail elf64-ia64.c:1562
ld is miscompiled (but the effect of miscompilation is just to print bogus assert, it will work properly). Here is a simplified testcase which is miscompiled at -O2: struct D { int d1; struct D *d2; }; struct C { struct D c1; long c2, c3, c4, c5, c6; }; struct A { struct A *a1; struct C *a2; }; struct B { struct C b1; struct A *b2; }; extern void abort (void); extern void exit (int); void foo (struct B *x, struct B *y) { if (x->b2 == 0) { struct A *a; x->b2 = a = y->b2; y->b2 = 0; for (; a; a = a->a1) a->a2 = &x->b1; } if (y->b2 != 0) abort (); if (x->b1.c3 == -1) { x->b1.c3 = y->b1.c3; x->b1.c4 = y->b1.c4; y->b1.c3 = -1; y->b1.c4 = 0; } if (y->b1.c3 != -1) abort (); } struct B x, y; int main () { y.b1.c1.d1 = 6; y.b1.c3 = 145; y.b1.c4 = 2448; x.b1.c3 = -1; foo (&x, &y); exit (0); }
Fixed in 2.11.92.0.12-10 (and gcc-3.1-0.19).