Bug 58694 - ld assertion failure
ld assertion failure
Status: CLOSED RAWHIDE
Product: Red Hat Raw Hide
Classification: Retired
Component: binutils (Show other bugs)
1.0
ia64 Linux
medium Severity medium
: ---
: ---
Assigned To: Jakub Jelinek
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2002-01-23 04:52 EST by Tim Waugh
Modified: 2008-05-01 11:38 EDT (History)
0 users

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2002-01-29 09:36:45 EST
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description Tim Waugh 2002-01-23 04:52:51 EST
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
Comment 1 Jakub Jelinek 2002-01-29 09:36:39 EST
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);
}
Comment 2 Jakub Jelinek 2002-02-01 11:22:10 EST
Fixed in 2.11.92.0.12-10 (and gcc-3.1-0.19).

Note You need to log in before you can comment on or make changes to this bug.