Bug in VAX SVR2 C compiler
Kenneth Almquist
ka at hropus.UUCP
Mon Mar 31 13:22:28 AEST 1986
There is a bug in the optimizing pass of the C compiler. I haven't
figured out the cause, but here is a piece of code that will demon-
strate it:
int flag;
int count;
getch() {
if (--count < 0) {
while (flag);
count--;
}
}
The loop "while(flag);" is admittedly contrived, but you can get the
same effect with a loop that actually does something. Without the
optimizer, the generated code is:
_fillbuf:
.word .R1
jbr .L15
.L16:
decl _count
jgeq .L17
jbr .L19
.L20:
.L19:
tstl _flag
jneq .L20
.L18:
decl _count
.L17:
ret#0
.set .R1,0x0
.L15:
jbr .L16
This is correct, if inefficient, code. However, running it through
the C optimizer with the -O option produces:
_fillbuf:
.word .R1
jbr .L20000
.L19:
tstl _flag
jneq .L19
.L20000:
decl _count
ret
In its eagerness to speed up the code it completely eliminates the test
for count < 0. The while loop (which is compiled into the two statements
following .L19) will never be executed.
Kenneth Almquist
More information about the Net.bugs.usg
mailing list