schmidt%blanche.ics.uci.edu@ORION.CF.UCI.EDU ("Douglas C. Schmidt") (11/24/88)
Bug Report for GCC: ------------------- Problem : The following input file causes a fatal signal on the sun 4. Note that this does *not* happen when -O is used! 1.) Version : gcc 1.31 ----------- 2.) Input Program : ----------------- /* don't use -O */ typedef struct { int w; unsigned int f; } real; main() { real a = {-10,10}; } 3.) Command Used : gcc ---------------- 4.) Files used : -------------- tm.h -> tm-sparc.h md -> sparc.md config.h -> xm-sunos4.h aux-output.c -> output-sparc.c 5.) Machine(s) used : ------------------- Sun 4 running Sun4.0 6.) Compiler diagnostics : ------------------------ gcc version 1.31 /usr/public/lib/gcc/gcc-cpp -v -I/cd/ua/schmidt/include/ -undef -D__GNU__ -D__GNUC__ -Dsparc -Dsun -Dunix fatal_sparc-bug.1.28.c /tmp/cca16562.cpp GNU CPP version 1.31 /usr/public/lib/gcc/gcc-cc1 /tmp/cca16562.cpp -quiet -dumpbase fatal_sparc-bug.1.28.c -finline-functions -version -o /tmp/cca16562.s GNU C version 1.31 (sparc) compiled by GNU C version 1.31. /usr/public/gcc: Program cc1 got fatal signal 6.
schmidt%blanche.ics.uci.edu@ORION.CF.UCI.EDU ("Douglas C. Schmidt") (11/24/88)
Bug Report for GCC:
-------------------
Problem : the following program crashes gcc 1.31 on the sun4.
1.) Version : gcc 1.31
-----------
2.) Input Program :
-----------------
float gf;
main ()
{
gf = 0;
reg_vlong ((long long)0);
reg_vlong ((long long)1);
}
3.) Command Used : gcc
----------------
4.) Files used :
--------------
tm.h -> tm-sparc.h
md -> sparc.md
config.h -> xm-sunos4.h
aux-output.c -> output-sparc.c
5.) Machine(s) used :
-------------------
Sun 4 running Sun4.0
6.) Compiler diagnostics :
------------------------
gcc version 1.31
/usr/public/lib/gcc/gcc-cpp -v -I/cd/ua/schmidt/include/ -undef -D__GNU__ -D__GNUC__ -Dsparc -Dsun -Dunix test2-bug.1.28.c /tmp/cca16888.cpp
GNU CPP version 1.31
/usr/public/lib/gcc/gcc-cc1 /tmp/cca16888.cpp -quiet -dumpbase test2-bug.1.28.c -finline-functions -version -o /tmp/cca16888.s
GNU C version 1.31 (sparc) compiled by GNU C version 1.31.
/usr/public/gcc: Program cc1 got fatal signal 6.
schmidt%blanche.ics.uci.edu@ORION.CF.UCI.EDU ("Douglas C. Schmidt") (11/24/88)
Bug Report for GCC: ------------------- Problem : The following program kills gcc 1.31 running on the sun 4. The problem doesn't appear if -O is used. 1.) Version : gcc 1.31 ----------- 2.) Input Program : ----------------- # 1 "device.c" # 1 "main.h" # 1 "/usr/include/stdio.h" extern struct _iobuf { int _cnt; unsigned char *_ptr; unsigned char *_base; int _bufsiz; short _flag; char _file; } _iob[]; extern struct _iobuf *fopen(); extern struct _iobuf *fdopen(); extern struct _iobuf *freopen(); extern struct _iobuf *popen(); extern struct _iobuf *tmpfile(); extern long ftell(); extern char *fgets(); extern char *gets(); extern char *ctermid(); extern char *cuserid(); extern char *tempnam(); extern char *tmpnam(); # 5 "main.h" # 1 "/usr/include/math.h" extern int errno, signgam; extern double fmod(), gamma(); extern int matherr(); extern double asinh(), acosh(), atanh(); extern double erf(), erfc(); extern double exp(), expm1(), log(), log10(), log1p(), pow(); extern double fabs(), floor(), ceil(), rint(); extern double lgamma(); extern double hypot(), cabs(); extern double copysign(), drem(), logb(), scalb(); extern int finite(); extern double j0(), j1(), jn(), y0(), y1(), yn(); extern double sin(), cos(), tan(), asin(), acos(), atan(), atan2(); extern double sinh(), cosh(), tanh(); extern double cbrt(), sqrt(); extern double modf(), ldexp(), frexp(), atof(); # 55 "/usr/include/math.h" struct exception { int type; char *name; double arg1; double arg2; double retval; }; # 6 "main.h" # 1 "/usr/local/lib/gcc-include/assert.h" void _eprintf (); # 7 "main.h" # 1 "/usr/include/setjmp.h" typedef int jmp_buf[15]; # 8 "main.h" # 1 "/usr/include/strings.h" char *strcat(); char *strncat(); int strcmp(); int strncmp(); char *strcpy(); char *strncpy(); int strlen(); char *index(); char *rindex(); # 9 "main.h" typedef struct dict_struct *Type; typedef struct object { int flags; Type type; int Length; union { int Integer, Boolean, Font; float Real; Type Dictionary; unsigned char *String; struct name_struct *Name; struct op_struct *Operator; struct file_struct *File; struct object *Array; } u; } Object; enum file_type { StringFile, StreamFile }; struct file_struct { enum file_type file_type; int available; union { unsigned char *c_ptr; struct _iobuf *f_ptr; } f; }; struct dict_entry { Object entry_key, entry_value; }; struct dict_struct { int dict_flags, dict_size, dict_fill; struct dict_entry *dict_body; }; typedef struct stack { int stack_fill, stack_size; Object overflow, underflow, *stack_body; } *Stack, StackOb; Object SameFlags (), MakeObject (), Cvx (), Cvlit (), ReadOnly (), WriteOnly (), ExecOnly (); int OpCheck (), min (), rCheck (), wCheck (), xCheck (); Object MakeArray (), ParseArray (), getArray (), getIArray (), *BodyArray (); Object MakeBoolean (); Object MakeDict (), DictLoad (), Lookup (), DictFrom (), Load (); Type MakeType (), TypeOf (), BodyDict (); extern int EqTrue (), Equal (); Object FileFrom (), FileString (); int Getch (); struct file_struct *BodyFile (); Object MakeInteger (), IntReal (); Object ParseNumber (); float Deg (), Rad (); Object ParseId (), NameFrom (), MakeName (), Cvn (), StringName (); unsigned char *BodyName (); Object MakeOp (), NameOperator (); Object Parse (); int PolyFirst (), PolySecond (), PolyThird (), PolyPair (); Object MakeReal (), RealInteger (); float BodyReal (), BodyFloat (); char *Malloc (); Object Pop (), Top (), Where (), DictLookup (); int Push (); extern Object MakeString (), StringFrom (), getIString (), ParseString (), ParseHexString (); unsigned char *BodyString (); int lengthString (); extern Object PDictFull; extern Object PDictOverflow, PInvFont, PSyntaxError; extern Object PDictUnderflow, PInvRestore, PTypeCheck; extern Object PExecOverflow, PIOError, PUndefined; extern Object PExecUnderflow, PLimitCheck, PUnFilename; extern Object PInterrupt, PNoCurrentPoint, PUnResult; extern Object PInvAccess, PRangeCheck, PUnMatched; extern Object PInvExit, POpOverflow, PUnregistered; extern Object PInvFileAccess, POpUnderflow, PVMError; extern Type Boolean, Mark, String, Real, Poly, Operator; extern Type Name, File, Dictionary, Condition, Null, Integer; extern Type Array, Mark, Condition, Null, Float, FontID; extern Object SysDict, Absent, Nil; extern Object True, False, Marker, Self; extern Object OpInterp, Lbracket, Rbracket; extern Object StatementEdit, Fstdin, Fstdout, Fstderr; extern Stack OpStack, ExecStack, DictStack; extern jmp_buf env; extern int interactive, verbose; extern char default_library[], *library; extern unsigned char *Bcopy (); extern struct _iobuf *vfp, *Fopen (); extern void Fclose (); extern int getchbuf; Object DictFind(); # 12 "device.c" # 1 "graphics.h" # 1 "device.h" # 1 "hard.h" # 1 "mat.h" typedef struct matrix { float A, B, C, D, tx, ty; } Matrix; typedef struct vector { float vx, vy, vt; } Vector; extern Matrix NewMatrix (), MatMult (), MatInvert (), Translate (), Rotate (), Scale (); extern Vector NewVector (), DiffVector (); extern Vector Transform (), ITransform (), DTransform (), IDTransform (); # 5 "hard.h" # 1 "rop.h" # 6 "hard.h" # 1 "colour.h" typedef struct { float hue, saturation, brightness; } Colour; extern Colour Black, White; extern Colour NewColour (), NewHSBColour (), NewRGBColour (), NewGray (); extern void ColourHSB (), ColourRGB (); extern float Gray (), Brightness (); # 7 "hard.h" # 1 "path.h" typedef struct hard_point { float hx, hy; } HardPoint; enum pelem_type { EHeader, EMove, ELine, EArc, ECurve, EClose }; struct path_element { enum pelem_type ptype; union { HardPoint point; struct arc { int dir; HardPoint centre; float radius, from, to; } arc; struct bezier { HardPoint x0, x1, x2; } curve; } pe; struct path_element *next, *last; }; typedef struct path_element *Path; extern HardPoint NewHardPoint (), ExtToInt (), MoveHardPoint (); extern Path NewPath (), PathCopy (), NewMove (); extern int PNewPath (), PInitMatrix (); extern Path NewClipPath (), PathRemove (), ReversePath (), FlattenPath (); extern float Normalise (), PointX (), PointY (); # 8 "hard.h" typedef struct device_point { int dx, dy; } DevicePoint; extern struct hardware *HardwareFromString (), *NewBitmapHardware (), *NewWindowHardware (), *InitHardware (); extern DevicePoint HardwareExtent (); extern char *StringFromHardware (); extern void BitBlt (), BitBltBlob (), BitBltLine (), DestroyHardware (); extern void HardUpdate (), UpdateControl (); extern Matrix DeviceMatrix (); extern void RasterTile (), BitBltTrapezoid (); extern int IsWindowHardware (), TransferSize (); extern void SetTransfer (); extern void Paint (), PaintLine (), PaintTrapezoid (); extern int ScreenSize (); extern void BuildScreen (), SetScreen (); extern DevicePoint NewDevicePoint (); # 5 "device.h" struct device { Matrix default_matrix; Path default_clip; int link_count; struct hardware *dev; }; extern struct device *NewDevice (), *NewCacheDevice (), *LinkDevice (), *DeviceFrom (), *UniqueDevice (); extern struct device *NewBitmapDevice (); # 5 "graphics.h" # 1 "point.h" typedef struct point { float x, y; } Point; extern Matrix PointTranslate (); extern Point NewPoint (), IntToExt (), MovePoint (); extern int MoveTo (), LineTo (); extern Object AssignMatrix (); # 6 "graphics.h" # 1 "font.h" extern Object Fid, FD, FontMatrix, FontType, Encoding, FontBBox, FontName; extern Object UserShow, CharStrings, Metrics; # 7 "graphics.h" struct show_context { char InShow; char space; Point Width; HardPoint shim, space_shim; Object CharName; struct cache *ccache; Matrix mat; }; struct state { Matrix CTM; Colour colour; HardPoint cp; int cp_defined; Path path; Path clip; Object font; float line_width; int line_cap; int line_join; struct { float frequency, rotation, *thresh; int count; Object spot_function; } screen; struct { Object transfn; float *tran; int tcount; } transfer; int flatness; float miter_limit; float dash_offset, dash_array [11 ]; int dash_length; struct device *device; struct show_context *show; struct device *clipdevice; }; extern struct state *gstate; extern int stroke_method, fill_method; # 13 "device.c" static int NullDevice (); static int FrameDevice (); static int GrabBits (); Colour Black = { 0.0, 0.0, 0.0 }, White = { 0.0, 0.0, 1.0 }; struct device *NewWindowDevice (), *NewBitmapDevice (), *NewCacheDevice (); InitDevices () { struct hardware *h; DevicePoint extent; InstallOp ("framedevice", FrameDevice, 4, 0, 0, 0, Array, Integer, Integer, Array); InstallOp ("nulldevice", NullDevice, 0, 0, 0, 0); InstallOp ("grabbits", GrabBits, 4, 0, 0, 0, Float, Float, Float, Float); extent = HardwareExtent (h = InitHardware ()); gstate->device = 0 ; gstate->clipdevice = 0 ; SetDevice (LinkDevice (DeviceFrom (h, DeviceMatrix (extent.dx, extent.dy)))); } static int GrabBits (x, y, w, h) Object x, y, w, h; { HardPoint origin, corner, extent; int width, height, size; char *s; struct hardware *dev; origin = ExtToInt (NewPoint (BodyReal (x), BodyReal (y))); corner = ExtToInt (NewPoint (BodyReal (x) + BodyReal (w), BodyReal (y) + BodyReal (h))); width = corner.hx - origin.hx; height = corner.hy - origin.hy; fprintf ((&_iob[2]) , "width = %d, height = %d\n", width, height); extent = NewHardPoint ((float) width, (float) height); dev = NewBitmapHardware (width, height); BitBlt (gstate->device->dev, dev, NewDevicePoint ((int) origin.hx, (int) origin.hy), NewDevicePoint (0, 0), NewDevicePoint ((int) extent.hx, (int) extent.hy), 3 ); s = StringFromHardware (dev); DestroyHardware (dev); size = (width + 7) / 8 * height; (((OpStack)->stack_fill != (OpStack)->stack_size) ? ((OpStack)->stack_body[(OpStack)->stack_fill] = ( MakeString (s, size)), (OpStack)->stack_fill++, 1 ) : 0 ) ; Free (s); (((OpStack)->stack_fill != (OpStack)->stack_size) ? ((OpStack)->stack_body[(OpStack)->stack_fill] = ( MakeInteger (width)), (OpStack)->stack_fill++, 1 ) : 0 ) ; (((OpStack)->stack_fill != (OpStack)->stack_size) ? ((OpStack)->stack_body[(OpStack)->stack_fill] = ( MakeInteger (height)), (OpStack)->stack_fill++, 1 ) : 0 ) ; return 1 ; } static int NullDevice () { SetDevice ( NewDevice ( NewClipPath (0.0, 0.0, 0.0, 0.0), NewMatrix (1.0, 0.0, 0.0, 1.0, 0.0, 0.0), (struct hardware *) 0 )); return 1 ; } static int FrameDevice (mat, width, height, proc) Object mat, width, height, proc; { Matrix m; if (lengthArray (mat) != 6 || !ExtractMatrix (&m, mat)) return Error (PTypeCheck); if (BodyInteger (width) < 0 || BodyInteger (height) < 0) return Error (PRangeCheck); SetDevice (NewWindowDevice (BodyInteger (width) * 8, BodyInteger (height), m)); ErasePage (); return 1 ; } struct device *DeviceFrom (h, m) struct hardware *h; Matrix m; { DevicePoint extent; extent = HardwareExtent (h); return NewDevice ( NewClipPath (0.0, (float) extent.dx, (float) extent.dy, 0.0), m, h); } struct device *NewWindowDevice (width, height, m) int width, height; Matrix m; { return DeviceFrom (NewWindowHardware (width, height), m); } struct device *NewBitmapDevice (width, height, m) int width, height; Matrix m; { return DeviceFrom (NewBitmapHardware (width, height), m); } struct device *NewCacheDevice (m, width, height, swidth, sheight) Matrix m; int width, height, swidth, sheight; { return NewDevice ( NewClipPath (0.0, (float) width, (float) height, 0.0), NewMatrix (m.A, m.B, m.C, m.D, (float) swidth, (float) height - sheight), NewBitmapHardware (width, height)); } Path NewClipPath (left, right, top, bottom) float left, right, top, bottom; { Path p = NewPath (); HardPoint cp; int cp_def = gstate->cp_defined; cp = gstate->cp; (void) MoveTo (p, NewHardPoint (left, bottom)); (void) LineTo (p, NewHardPoint (right, bottom)); (void) LineTo (p, NewHardPoint (right, top)); (void) LineTo (p, NewHardPoint (left, top)); ClosePath (p); gstate->cp = cp; gstate->cp_defined = cp_def; return p; } struct device *NewDevice (clip, m, dev) Path clip; Matrix m; struct hardware *dev; { struct device *res = (struct device *) Malloc (sizeof (struct device)); res->link_count = 0; res->default_clip = clip; res->default_matrix = m; res->dev = dev; return res; } SetDevice (d) struct device *d; { UnlinkDevice (gstate->device); gstate->device = LinkDevice (d); gstate->CTM = d->default_matrix; InitClip (); } int IsCache (d) struct device *d; { return !IsWindowHardware (d->dev); } struct device *LinkDevice (d) struct device *d; { if (d) ++d->link_count; return d; } UnlinkDevice (d) struct device *d; { if (d == 0 ) return; if (--d->link_count != 0) return; if (d->dev != 0 ) DestroyHardware (d->dev); Free ((char *) d); } struct device *UniqueDevice (d) struct device *d; { struct device *res; DevicePoint ex; if (d && d->link_count == 1) return d; ex = HardwareExtent (gstate->device->dev); res = LinkDevice (NewBitmapDevice (ex.dx, ex.dy, gstate->CTM)); BitBlt (0 , res->dev, NewDevicePoint (0, 0), NewDevicePoint (0, 0), ex, 0 ); return res; } DevicePoint NewDevicePoint (x, y) int x, y; { DevicePoint res; res.dx = x; res.dy = y; return res; } DevicePoint HardToDevice (p) HardPoint p; { return NewDevicePoint ((int) p.hx, (int) p.hy); } DevicePaintLine (d, fromPoint, toPoint, colour) struct device *d; HardPoint fromPoint, toPoint; Colour colour; { PaintLine (d->dev, HardToDevice (fromPoint), HardToDevice (toPoint), colour); } 3.) Command Used : gcc ---------------- 4.) Files used : -------------- tm.h -> tm-sparc.h md -> sparc.md config.h -> xm-sunos4.h aux-output.c -> output-sparc.c 5.) Machine(s) used : ------------------- Sun 4 running Sun4.0 6.) Compiler diagnostics : ------------------------ gcc version 1.31 /usr/public/lib/gcc/gcc-cpp -v -I/cd/ua/schmidt/include/ -undef -D__GNU__ -D__GNUC__ -Dsparc -Dsun -Dunix trap-bug.1.28.c /tmp/cca17193.cpp GNU CPP version 1.31 /usr/public/lib/gcc/gcc-cc1 /tmp/cca17193.cpp -quiet -dumpbase trap-bug.1.28.c -finline-functions -version -o /tmp/cca17193.s GNU C version 1.31 (sparc) compiled by GNU C version 1.31. /usr/public/gcc: Program cc1 got fatal signal 6.
schmidt%blanche.ics.uci.edu@ORION.CF.UCI.EDU ("Douglas C. Schmidt") (11/24/88)
Bug Report for GCC: ------------------- Problem : The following program gets a fatal signal on the sparc when compiled with the -finline-functions -fstrength-reduce -O options enabled 1.) Version : gcc 1.31 ----------- 2.) Input Program : ----------------- extern double drem(); struct sat { double a; double e; double pomega; double mu; double omega; double phi; double p0; double yr, yi; int n; int index; int current; }; static double dt; struct sat *nextpl(pl, nplanet, test) struct sat *pl; int nplanet; struct sat test; { struct sat *sptr, *encptr; double dtmin, dttry; double dphi; dtmin = 1.0 / 1.0e-12 ; encptr = 0 ; for(sptr = pl; sptr < pl + nplanet; sptr++) { if(sptr->current == 0) { if(test.a > sptr->a) { dphi = test.phi - sptr->phi; } else { dphi = sptr->phi - test.phi; } dphi = drem(dphi, (2.0*3.14159265358979323846 ) ); if(dphi < 0.0) dphi = (2.0*3.14159265358979323846 ) + dphi; if((dttry = dphi/({ double __value, __arg = (sptr->omega - test.omega); asm ("fpabsd %1, %0": "=xy" (__value): "xym" (__arg)); __value; }) ) < dtmin) { dtmin = dttry; encptr = sptr; } } } for(sptr = pl; sptr < pl + nplanet; sptr++) { dphi = (2.0*3.14159265358979323846 ) ; if((dttry = dphi/({ double __value, __arg = (sptr->omega - test.omega); asm ("fpabsd %1, %0": "=xy" (__value): "xym" (__arg)); __value; }) ) < dtmin) { dtmin = dttry; encptr = sptr; } } dt = dtmin; return (encptr); } 3.) Command Used : gcc -finline-functions -fstrength-reduce -O ---------------- 4.) Files used : -------------- tm.h -> tm-sparc.h md -> sparc.md config.h -> xm-sunos4.h aux-output.c -> output-sparc.c 5.) Machine(s) used : ------------------- Sun 4 running Sun4.0 6.) Compiler diagnostics : ------------------------ gcc version 1.31 /usr/public/lib/gcc/gcc-cpp -v -I/cd/ua/schmidt/include/ -undef -D__GNU__ -D__GNUC__ -Dsparc -Dsun -Dunix -D__OPTIMIZE__ q-bug-1.30.c /tmp/cca18644.cpp GNU CPP version 1.31 /usr/public/lib/gcc/gcc-cc1 /tmp/cca18644.cpp -quiet -dumpbase q-bug-1.30.c -finline-functions -finline-functions -fstrength-reduce -O -version -o /tmp/cca18644.s /usr/public/gcc: Program cc1 got fatal signal 11.