[comp.os.minix] bug in compiler

n62@np1.hep.nl (Klamer Schutte) (03/02/89)

I found a bug in the minix-st compiler ( could be also in the PC version;
i don't know ). The bug occurs when somebody tries to initialise a 
structure containing items with an odd length. I don't know where the
bug occurs: cem, opt, cg? and i don't have source's of the compiler.
Here is the source causing the bug:

struct foo
{	char	three[3];
	char	one;
}	bar[4] =	{ { "te", 1 }, { "st", 2 } };

main()
{
	int	i;

	for( i=0; i<3; i++)
	{	printf("0 : %d 1 : %d 2 : %d 3 : %d 4 : %d\n",
		  bar[i].three[0], bar[i].three[1], bar[i].three[2],
		  bar[i].three[3], bar[i].three[4] );
		printf("three : %s one : %d\n", bar[i].three, bar[i].one );
	}
}
This gives the following assembly:
.sect .text;.sect .rom;.sect .data;.sect .bss
.extern _bar
.sect .data
_bar:
.data2	29797
.data2	0
.data2	371
.data2	29696
.data2	2
.data2	0
.data2	0
.data2	0
.extern _main
.data2	0
.sect .text
_main:
link	a6,#-2
< following code deleted >
I think the code following _bar: should have been:
.data2 't'*256+'e'
.data2 0*256+1
.data2 's'*256+'t'
.data2 0*256+2
.data2 0
.data2 0
as the compiler thinks when accessing bar[] each item has size 4.
Here is the output of the program, piped through od:
a.out | od -chx > outputfile
0000000    3020    3a20    3131    3620    3120    3a20    3130    3120
          0       :       1   1   6       1       :       1   0   1    
0000010    3220    3a20    3020    3320    3a20    3020    3420    3a20
          2       :       0       3       :       0       4       :    
						 ^^ should be 1
0000020    310a    7468    7265    6520    3a20    7465    206f    6e65
          1  \n   t   h   r   e   e       :       t   e       o   n   e
	 ^^ should be 115 = 's'
0000030    203a    2030    0a30    203a    2031    2031    203a    2031
              :       0  \n   0       :       1       1       :       1
0000040    3135    2032    203a    2031    3136    2033    203a    2030
          1   5       2       :       1   1   6       3       :       0
0000050    2034    203a    2030    0a74    6872    6565    203a    2001
              4       :       0  \n   t   h   r   e   e       :     001
0000060    7374    206f    6e65    203a    2030    0a30    203a    2030
          s   t       o   n   e       :       0  \n   0       :       0
0000070    2031    203a    2032    2032    203a    2030    2033    203a
              1       :       2       2       :       0       3       :
0000080    2030    2034    203a    2030    0a74    6872    6565    203a
              0       4       :       0  \n   t   h   r   e   e       :
0000090    2020    6f6e    6520    3a20    300a
                  o   n   e       :       0  \n
000009A

Remedy: avoid initialising such struct's
Klamer
-- 
________________________________________________________________________________
Klamer Schutte			mcvax!nikhefh!n62	      n62@nikhefh.hep.nl