ada/6306: gcc on s390 gets ICE in verify_local_live_at_start, at flow.c:583
pthomas@suse.de
pthomas@suse.de
Mon Apr 15 06:26:00 GMT 2002
>Number: 6306
>Category: ada
>Synopsis: gcc on s390 gets ICE in verify_local_live_at_start, at flow.c:583
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: ice-on-legal-code
>Submitter-Id: net
>Arrival-Date: Mon Apr 15 06:26:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator: pthomas@suse.de
>Release: 3.1 20020408 (prerelease)
>Organization:
>Environment:
s390-suse-linux
>Description:
gcc fails on IBM zSeries (s390) with:
s390_bug_O3.c: In function `foo':
s390_bug_O3.c:76: Internal compiler error in verify_local_live_at_start, at flow.c:583
This *only* happens when passed -O3.
>How-To-Repeat:
Compile the attached file with 'gcc -c -O3 390_bug_O3.c'.
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/plain; name="s390_bug_O3.c"
Content-Disposition: inline; filename="s390_bug_O3.c"
unsigned long foo (unsigned long *rp, unsigned long *ap, int num, unsigned long w)
{
unsigned long c1 = 0;
if (num <= 0)
return (c1);
while (num & ~3)
{
{
unsigned long long t;
t = (unsigned long long) w *(ap[0]) + (rp[0]) + (c1);
(rp[0]) = (((unsigned long) (t)) & (0xffffffffL));
(c1) = (((unsigned long) ((t) >> 32)) & (0xffffffffL));
};
{
unsigned long long t;
t = (unsigned long long) w *(ap[1]) + (rp[1]) + (c1);
(rp[1]) = (((unsigned long) (t)) & (0xffffffffL));
(c1) = (((unsigned long) ((t) >> 32)) & (0xffffffffL));
};
{
unsigned long long t;
t = (unsigned long long) w *(ap[2]) + (rp[2]) + (c1);
(rp[2]) = (((unsigned long) (t)) & (0xffffffffL));
(c1) = (((unsigned long) ((t) >> 32)) & (0xffffffffL));
};
{
unsigned long long t;
t = (unsigned long long) w *(ap[3]) + (rp[3]) + (c1);
(rp[3]) = (((unsigned long) (t)) & (0xffffffffL));
(c1) = (((unsigned long) ((t) >> 32)) & (0xffffffffL));
};
ap += 4;
rp += 4;
num -= 4;
}
if (num)
{
{
unsigned long long t;
t = (unsigned long long) w *(ap[0]) + (rp[0]) + (c1);
(rp[0]) = (((unsigned long) (t)) & (0xffffffffL));
(c1) = (((unsigned long) ((t) >> 32)) & (0xffffffffL));
};
if (--num == 0)
return c1;
{
unsigned long long t;
t = (unsigned long long) w *(ap[1]) + (rp[1]) + (c1);
(rp[1]) = (((unsigned long) (t)) & (0xffffffffL));
(c1) = (((unsigned long) ((t) >> 32)) & (0xffffffffL));
};
if (--num == 0)
return c1;
{
unsigned long long t;
t = (unsigned long long) w *(ap[2]) + (rp[2]) + (c1);
(rp[2]) = (((unsigned long) (t)) & (0xffffffffL));
(c1) = (((unsigned long) ((t) >> 32)) & (0xffffffffL));
};
return c1;
}
return (c1);
}
More information about the Gcc-bugs
mailing list