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