bruce@heather.pooh.com (Bruce Robertson) (01/17/90)
I've come across a way of accessing a structure that causes incorrect
code to be generated. The bug only appears when the optimizer is used.
Configuration: GCC 1.36, tm-sun3.h, and m68k.md.
Command line: gcc -S -O -g bug.c
First, here's some code that tickles the bug:
----------------------------------------------------------------------
typedef struct
{
short fh;
char *buf;
short count;
}
read_args;
short
_read(read_args arg)
{
return read(arg.fh, arg.buf, arg.count);
}
----------------------------------------------------------------------
Next, here's the incorrect assembly code:
----------------------------------------------------------------------
#NO_APP
gcc_compiled.:
.stabs "glue.c",100,0,0,Ltext
Ltext:
.stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
.stabs "char:t2=r2;0;127;",128,0,0,0
.stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
.stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
.stabs "long unsigned int:t5=r1;0;-1;",128,0,0,0
.stabs "short int:t6=r1;-32768;32767;",128,0,0,0
.stabs "long long int:t7=r1;0;-1;",128,0,0,0
.stabs "short unsigned int:t8=r1;0;65535;",128,0,0,0
.stabs "long long unsigned int:t9=r1;0;-1;",128,0,0,0
.stabs "signed char:t10=r1;-128;127;",128,0,0,0
.stabs "unsigned char:t11=r1;0;255;",128,0,0,0
.stabs "float:t12=r1;4;0;",128,0,0,0
.stabs "double:t13=r1;8;0;",128,0,0,0
.stabs "long double:t14=r1;8;0;",128,0,0,0
.stabs "void:t15=15",128,0,0,0
.stabs "read_args:t16=s8fh:6,0,16;buf:17=*2,16,32;\\",128,0,0,0
.stabs "count:6,48,16;;",128,0,0,0
.text
.even
.globl __read
__read:
.stabd 68,0,11
link a6,#0
movel d2,sp@-
movel a6@(8),d0
movel a6@(12),d1
.stabd 68,0,12
movew d1,a0
movel a0,sp@-
movel d0,sp@- <= this is pushing "arg.fh", and the high
order 16 bits of "arg.buf".
bfexts d0{#0:#16},d2
movel d2,sp@-
jbsr _read
extl d0
.stabd 68,0,13
movel a6@(-4),d2
unlk a6
rts
.stabs "_read:F6",36,0,0,__read
.stabs "arg:p16",160,0,0,8
.stabs "arg:r16",64,0,0,0
--
Bruce Robertson
Hundred Acre Software, Reno, NV
Domain: bruce@pooh.com
UUCP: ...!uunet!tahoe.unr.edu!heather!bruce