Fix: sometimes crashed on initializers for unknown types
authorceriel <none@none>
Mon, 30 Sep 1991 15:00:46 +0000 (15:00 +0000)
committerceriel <none@none>
Mon, 30 Sep 1991 15:00:46 +0000 (15:00 +0000)
lang/cem/cemcom.ansi/ival.g
lang/cem/cemcom/ival.g
lang/cem/cemcom/proto.make

index 1d7ed07..454343b 100644 (file)
@@ -140,6 +140,9 @@ gen_tpcheck(tpp)
                if (! valid_type(tp, "union"))
                        gen_error = pack_level;
                break;
+       case ERRONEOUS:
+               if (! gen_error) gen_error = pack_level;
+               break;
        }
 }
 
@@ -252,6 +255,9 @@ gen_tphead(tpp, nest)
                        return gen_tphead(&(sd->sd_type), 1);
                }
                return &(sd->sd_type);
+       case ERRONEOUS:
+               if (! gen_error) gen_error = pack_level;
+               /* fall through */
        default:
                p->nelem = 1;
                p->elem_count = 1;
@@ -273,6 +279,9 @@ gen_tpmiddle()
 again:
        tp = *(p->s_tpp);
        switch(tp->tp_fund) {
+       case ERRONEOUS:
+               if (! gen_error) gen_error = pack_level;
+               return p->s_tpp;
        default:
                if (p->elem_count == p->nelem && p->s_nested) {
                        p = p->next;
@@ -556,6 +565,8 @@ and also to prevent runtime coercions for compile-time constants.
 #endif NOBITFIELD
 
        case ERRONEOUS:
+               if (! gen_error) gen_error = pack_level;
+               /* fall through */
        case VOID:
                break;
        default:
index f13b89a..5c05650 100644 (file)
@@ -134,6 +134,9 @@ gen_tpcheck(tpp, union_allowed)
                if (! valid_type(tp, "union"))
                        gen_error = pack_level;
                break;
+       case ERRONEOUS:
+               if (! gen_error) gen_error = pack_level;
+               break;
        }
 }
 
@@ -243,6 +246,9 @@ gen_tphead(tpp, nest)
                        return gen_tphead(&(sd->sd_type), 1);
                }
                return &(sd->sd_type);
+       case ERRONEOUS:
+               if (! gen_error) gen_error = pack_level;
+               /* fall through */
        default:
                p->nelem = 1;
                p->elem_count = 1;
@@ -264,6 +270,9 @@ gen_tpmiddle()
 again:
        tp = *(p->s_tpp);
        switch(tp->tp_fund) {
+       case ERRONEOUS:
+               if (! gen_error) gen_error = pack_level;
+               return p->s_tpp;
        default:
                if (p->elem_count == p->nelem && p->s_nested) {
                        p = p->next;
@@ -544,6 +553,7 @@ and also to prevent runtime coercions for compile-time constants.
 #endif NOBITFIELD
 
        case ERRONEOUS:
+               if (! gen_error) gen_error = pack_level;
                break;
        default:
                crash("check_ival");
index 7049d4d..e0696bc 100644 (file)
@@ -96,7 +96,7 @@ GEN_H = botch_free.h dataflow.h debug.h density.h errout.h \
         regcount.h \
        code.h declar.h decspecs.h def.h expr.h field.h estack.h util.h \
        idf.h macro.h stmt.h struct.h switch.h type.h l_brace.h l_state.h \
-       l_outdef.h stack.h
+       l_outdef.h stack.h lapbuf.h noRoption.h nofloat.h
 
 HFILES=        $(GEN_H) $(SRC_H)