adrian@ru-cs44.UUCP (10/24/83)
Here's a simple prog. for you all to try.
==========================================
MODULE test;
FROM TTIO IMPORT WriteString, WriteLn;
VAR
x : INTEGER;
a, b, c : INTEGER;
BEGIN
x := 1;
a := 32;
b := 32;
c := 22;
IF ((x = 1) AND ((a = b) OR (a = c))) OR
((x = 2) AND ((c = a) OR (c = b))) THEN
WriteString('Succeeded',0)
ELSE
WriteString('Failed',0)
END;
WriteLn;
END test.
==========================================
On the New South Wales compiler running here, it prints 'Failed' which
is incorrect. The problem seems to be in the code generated for the
boolean expression s.t. if x=1 and a=b, the next test applied is
((c=a) OR (c=b)) which is in a different arm of the conditional.
I'd be interested in anybody else's experiences with this and if you
send me results by MAIL, I'll post a summary in a few weeks.
Incidentally, the fix to our compiler is by no means obvious, and
hasn't been done yet. Watch this space.
--
Adrian Pell ({vax135,mcvax,edcaad}!ukc!ru-cs44!adrian)
Computer Science Dept.
University of Reading
UK