agrusow@exunido.uucp (Michael Vishchers) (06/26/89)
This is a followup to my article about the Sozobon C case-without-switch bug.
I received an answer from Tony Andrews saying that this bug will not be in
the new version. For all those who do not want to wait, but get rid of the
bombs NOW, here is a bug fix I received from
Andreas Schwab <schwab@joan.irb.informatik.uni-dortmund.de>
I have not tested it, but it seems okay.
Ah yes, if you do not have patch, you must make the modifications by hand.
Isn't it great to have a good Compiler with sources ?
Good luck.
diff -c fun.c.old fun.c
*** fun.c.old Mon Jun 26 12:53:39 1989
--- fun.c Mon Jun 26 12:53:03 1989
***************
*** 34,40
struct swittbl {
NODEP caselist;
int deflbl;
! } *curswit;
int curbrk, curcont;
int funtopl, funbotl, funretl, funstrl;
--- 34,40 -----
struct swittbl {
NODEP caselist;
int deflbl;
! } *curswit = NULL; /* Initialisierung noetig */
int curbrk, curcont;
int funtopl, funbotl, funretl, funstrl;
***************
*** 616,621
case K_DEFAULT:
if (debugs)
printf("DEFAULT ");
if (curswit->deflbl >= 0)
error("multiple 'default'");
curswit->deflbl = l1;
--- 616,623 -----
case K_DEFAULT:
if (debugs)
printf("DEFAULT ");
+ if (curswit == NULL) /* Innerhalb 'switch'? */
+ error("'default' without 'switch'");
if (curswit->deflbl >= 0)
error("multiple 'default'");
curswit->deflbl = l1;
***************
*** 703,708
np->c_casel = lbl;
sprintf(np->n_name, "%d:%d", val, lbl);
last = NULL;
for (p = curswit->caselist; p; last=p, p=p->n_next)
if (p->c_casev == val) {
--- 705,712 -----
np->c_casel = lbl;
sprintf(np->n_name, "%d:%d", val, lbl);
+ if (curswit == NULL) /* Innerhalb 'switch'? */
+ error("'case' without 'switch'");
last = NULL;
for (p = curswit->caselist; p; last=p, p=p->n_next)
if (p->c_casev == val) {
------------------------------------------------------------------------
______________________________________________________________________
/ Michael Vishchers | History repeats itself.\
| michaelV@owl.ls5.informatik.uni-dortmund.de | Has to. |
| michaelV%owl.ls5@UNIDO.uucp | No one listens. |
| (I think) | (steve turner) |
\______________________________________________________________________/
/ Home address:: Frohnhauser Str. 233 D-4300 Essen 1 West-Germany\
________________________________________________________________________