From: hartl@informatik.tu-muenchen.DE (Anton Hartl)
Subject: GCC 2.1 Bug/cc1 dumps core with -O
Reply-To: hartl@informatik.tu-muenchen.de
Organization: GNUs Not Usenet
Distribution: gnu
Date: Mon, 6 Apr 1992 16:37:15 GMT

GCC 2.1 Bug Report

	cc1 dumps core when run with -O with the program below, i.e.
	    gcc -O -c tt.c 
	gives
	    gcc: Internal compiler error: program cc1 got fatal signal 11

	Wether cc1 is compiled with the systems C compiler /bin/cc,
	gcc 1.40 or with itself makes no difference.


Environment/Installation
	Sun Sparc, SunOS 4.1.1
	./configure sparc
	no special local modifications whatsoever


The gdb stack backtrace looks like that

Core was generated by `cc1'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libc.so.1.9...done.
#0  relax_delay_slots (first=0x185cf8) at reorg.c:3140
3140                  ++LABEL_NUSES (target_label);
(gdb) bt
#0  relax_delay_slots (first=0x185cf8) at reorg.c:3140
#1  0x11588c in dbr_schedule (first=0x185cf8, file=0x0) at reorg.c:3572
#2  0x2b89c in rest_of_compilation (decl=0x196938) at toplev.c:2377
#3  0x16980 in finish_function (nested=0) at c-decl.c:5586
#4  0x2bf8 in yyparse () at c-parse.y:257
#5  0x29730 in compile_file (name=0xf7fffaa2 "/usr/tmp/cca01359.i")
    at toplev.c:1607
#6  0x2d0d4 in main (argc=8, argv=0xf7fff9dc, envp=0xf7fffa00) at toplev.c:3012
(gdb)


Below I've append the smallest source file that reproduces the error.

Regards,
	Toni

_____________________________________________________________________________
_Anton Hartl___________________________Anton.Hartl@informatik.tu-muenchen.de_



#include <stdio.h>

typedef int     size_t;
typedef int     ERR_TYPE;

typedef struct
{
    ERR_TYPE        f_error;
} H_SYS_INFO;

typedef struct
{
    short           l, cb, ce;
} LINE_TYPE;

typedef struct
{
    long            num;
    LINE_TYPE       rl[(60000 * 2)];
} RL_TYPE;

typedef struct
{
    short           cl[30000], cc[30000];
    long            num;
} CONTOUR_TYPE;

typedef union
{
    long            l;
    float           f;
    char           *s;
} PAR_TYPE;

extern H_SYS_INFO HSysInfo;

ERR_TYPE 
HThickness(chord, dicke, histo, dicke_length, histo_length)
    RL_TYPE        *chord;
    PAR_TYPE        dicke[];
    PAR_TYPE        histo[];
    long           *histo_length, *dicke_length;
{
    double          l, c;
    long            i, num;
    long            x, y, maxx, minx;
    double          phi;
    double          b;
    double          cosphi, sinphi;
    RL_TYPE        *new;
    CONTOUR_TYPE   *cont;
    ERR_TYPE        HRLToCont();

    while (HRLSeg(new))
    {
	{
	    register ERR_TYPE ERR;
	    if ((ERR = HRLToCont(new, cont)) != 1)
		return (ERR);
	    if (HSysInfo.f_error != 1)
		return (HSysInfo.f_error);
	};
	sinphi = sin(phi);
	cosphi = cos(phi);
	x = c * cosphi - l * sinphi;
	b = -l * cosphi - c * sinphi;
	for (i = 0; i <= cont->num - 1; i++)
	{
	    y = -cont->cl[i] * cosphi - cont->cc[i] * sinphi - b;
	    x = cont->cc[i] * cosphi - cont->cl[i] * sinphi;
	    if (x < minx)
		minx = x;
	    if (x > maxx)
		maxx = x;
	    cont->cc[i] = (short) x;
	    cont->cl[i] = (short) y;
	}
	num = 0;
	x = minx;
	for (i = 0; i < 1024 * 2; i++)
	    histo[i].l = 0;
	i = 0;
	while (i < num)
	{
	    histo[(dicke[i].l)].l += 1;
	    i++;
	}
	i = 1024 * 2 - 1;
	while (!histo[i--].l) ;
	i += 2;
    }
    {
	register ERR_TYPE ERR;
	if ((ERR = HFreeTmp((char *) cont)) != 1)
	    return (ERR);
    };
    {
	register ERR_TYPE ERR;
	if ((ERR = HFreeRL(new)) != 1)
	    return (ERR);
	if (HSysInfo.f_error != 1)
	    return (HSysInfo.f_error);
    };
    return (1);
}

Newsgroups: gnu.gcc.bug