bug in /usr/src/cmd/cpp/cpy.y
utzoo!decvax!ittvax!swatt
utzoo!decvax!ittvax!swatt
Thu Aug 19 09:43:12 AEST 1982
Please escuse me if this is the second time you've seen this, but our
decvax link was causing problems and I could never find out if this
got through.
- Alan
>>From: ittvax!swatt (Alan S. Watt)
>>Newsgroups: net.bugs.4bsd,net.bugs.v7
>>Title: Bug in /usr/src/cmd/cpp/cpy.y
>>Article-I.D.: ittvax.416
>>Posted: Sun Aug 15 14:30:07 1982
>>Received: Sun Aug 15 14:30:07 1982
Sun Aug 15 14:12:09 EDT 1982: Bug in /usr/src/cmd/cpp/cpy.y
I just got bitten by a bug in the C pre-processor. It took me
quite a while to realize I was dealing with a cpp bug, and not
one of my own. The symptom is that negative numbers in "#if"
statements are treated as 0. Try the following:
/lib/cpp <<!EOF
#if -1 == 0
Oh boy, are you in trouble
#else
Yours works OK.
#endif
!EOF
Our cpp does not carry a version number, but the README file
in /usr/src/cmd/cpp is dated Aug 25, 1978. I think this was
included on all the V7 distributions; our system is 4.1bsd.
It's hard to believe someone hasn't noticed this before, but
I usually pay close attention to C compiler bugs reports, and
I don't recall seeing anything.
- Alan S. Watt
[decvax!]ittvax!swatt
The fix is quite simple and involves 1 line in the yacc source:
======================================================================
echo -n "/usr/src/cmd/cpp/cpy.y: "
sum /usr/src/cmd/cpp/cpy.y >/tmp/upd.$$.sum
if cmp - /tmp/upd.$$.sum <<!EOF.9122
53580 2
!EOF.9122
then
echo "OK -- applying edit commands"
cp /usr/src/cmd/cpp/cpy.y /tmp/upd.$$.tmp ; chmod +w /tmp/upd.$$.tmp
ed - /tmp/upd.$$.tmp <<\!EOF.9122
66c
={$$ = -$2;}
.
0a
/* Aug 15 14:05:14 1982: (ittvax!swatt):
* bug in term: '-' term
* production fixed.
*/
.
w
q
!EOF.9122
rm -f cpy.y
cp /tmp/upd.$$.tmp cpy.y ; chmod a-w cpy.y
else
echo "Old source file not same version;" \
"use diff listings by hand" <<!EOF.9122
*** /usr/src/cmd/cpp/cpy.y Sat May 3 20:54:20 1980
--- cpy.y Sun Aug 15 14:06:11 1982
***************
*** 1,3
%term number stop DEFINED
%term EQ NE LE GE LS RS
%term ANDAND OROR
--- 1,7 -----
+ /* Aug 15 14:05:14 1982: (ittvax!swatt):
+ * bug in term: '-' term
+ * production fixed.
+ */
%term number stop DEFINED
%term EQ NE LE GE LS RS
%term ANDAND OROR
***************
*** 63,69
={$$ = $1;}
term:
'-' term %prec UMINUS
! ={$$ = -$1;}
| '!' term
={$$ = !$2;}
| '~' term
--- 67,73 -----
={$$ = $1;}
term:
'-' term %prec UMINUS
! ={$$ = -$2;}
| '!' term
={$$ = !$2;}
| '~' term
!EOF.9122
fi
rm -f /tmp/upd.$$.tmp /tmp/upd.$$.sum
======================================================================
More information about the Net.bugs.v7
mailing list