stepp@uiuccsb.UUCP (11/09/83)
#N:uiuccsb:14900005:000:2220 uiuccsb!stepp Nov 8 10:06:00 1983 The following program illustrates a bug in the code generator of pc. We are running 4.1a BSD on an 11/780. program errors(output); var prtflags : set of 'a'..'z'; begin prtflags := ['e']; if (prtflags*['a','e']=['e']) then writeln('true') else writeln('false'); end. When run through pi;px the output is 'true' (correct). When run through pc;a.out the output is 'false' (***error***). The -S output of pc follows. I do not know the fix for this, is it ok in 4.2? .stabs "cerror.p",0x30,0,0x1,0 .data .align 2 .comm _prtflags,4 .text .stabs "prtflags",0x30,0,0x6,0x4 .text .align 1 .globl _main _main: .word 0 calls $0,_PCSTART movl 4(ap),__argc movl 8(ap),__argv calls $0,_program calls $0,_PCEXIT .text .align 1 .globl _program _program: .word L2 jbr L4 L3: moval _UNWIND,0(fp) moval __disply+8,-4(fp) movq __disply+8,-12(fp) movq ap,__disply+8 .data .align 2 L6: .long 0x10 .text movl L6,_prtflags .data .align 2 L7: .long 0x11 .text .data .align 2 L8: .long 0x10 .text pushl $L8 pushl $1 pushl $L7 pushl $_prtflags subl3 $32,fp,r0 pushl r0 popr $0x17 movl r0,r3 1: mcoml (r1)+,r5 bicl3 r5,(r2)+,(r3)+ sobgtr r4,1b pushl r0 pushl $16 popr $0xb movl r0,r4 1: movzwl $65535,r0 cmpl r4,r0 jleq 3f subl2 r0,r4 cmpc3 r0,(r1),(r3) jeql 1b 2: clrl r0 jbr 4f 3: cmpc3 r4,(r1),(r3) jneq 2b incl r0 4: tstl r0 jeql L9 moval _output,-16(fp) .data L10: .byte 0164,0162,0165,0145 .byte 0 .text pushl -16(fp) movl (sp)+,r1 movl 12(r1),r0 pushl r0 pushl $1 pushl $4 pushl $L10 calls $4,_fwrite pushl -16(fp) movl (sp)+,r1 movl 12(r1),r0 pushl r0 cvtbl $10,-(sp) sobgeq *4(sp),1f calls $2,__flsbuf jbr 2f 1: popr $0x3 movb r0,*4(r1) incl 4(r1) 2: jbr L11 L9: moval _output,-16(fp) .data L12: .byte 0146,0141,0154,0163,0145 .byte 0 .text pushl -16(fp) movl (sp)+,r1 movl 12(r1),r0 pushl r0 pushl $1 pushl $5 pushl $L12 calls $4,_fwrite pushl -16(fp) movl (sp)+,r1 movl 12(r1),r0 pushl r0 cvtbl $10,-(sp) sobgeq *4(sp),1f calls $2,__flsbuf jbr 2f 1: popr $0x3 movb r0,*4(r1) incl 4(r1) 2: L11: movq -12(fp),__disply+8 ret .set L2, 0x0 L4: subl2 $LF1,sp .set LF1,32 jbr L3
afd@decvax.UUCP (Alan Delorey) (11/11/83)
The bug that was described about Pascal is still a bug in 4.2BSD, it has not been fixed. I ran the program that was submitted and got the same results under 4.2.