some minor fixes
authorceriel <none@none>
Wed, 14 Oct 1987 12:34:47 +0000 (12:34 +0000)
committerceriel <none@none>
Wed, 14 Oct 1987 12:34:47 +0000 (12:34 +0000)
lang/m2/comp/chk_expr.c
lang/m2/comp/chk_expr.h
lang/m2/comp/def.c

index b8e92e8..03621e7 100644 (file)
@@ -422,7 +422,7 @@ MkSet(size)
 {
        register arith  *s;
 
-       size += sizeof(arith);
+       size = ((size + (int)word_size - 1) / (int)word_size + 1) * sizeof(arith);
        s = (arith *) Malloc(size);
        clear((char *) s , size);
        s++;
@@ -433,6 +433,7 @@ MkSet(size)
 FreeSet(s)
        register arith *s;
 {
+       dec_refcount(s);
        if (refcount(s) <= 0) {
                free((char *) (s-1));
        }
@@ -482,7 +483,7 @@ ChkSet(expp)
           First allocate room for the set.
        */
 
-       expp->nd_set = MkSet((unsigned)(tp->tp_size) * (sizeof(arith) / (int) word_size));
+       expp->nd_set = MkSet((unsigned)(tp->tp_size));
 
        /* Now check the elements, one by one
        */
index e45cdac..4db3ad1 100644 (file)
@@ -20,4 +20,5 @@ extern int    (*DesigChkTable[])();   /* table of designator checking
 #define ChkDesignator(expp)    ((*DesigChkTable[(expp)->nd_class])(expp))
 
 #define inc_refcount(s)                (*((s) - 1) += 1)
+#define dec_refcount(s)                (*((s) - 1) -= 1)
 #define refcount(s)            (*((s) - 1))
index 21ecfbd..6442453 100644 (file)
@@ -360,10 +360,12 @@ CheckWithDef(df, tp)
                possible earlier definition in the definition module.
        */
 
-       if (df->df_type) {
+       if (df->df_kind == D_PROCHEAD && df->df_type != error_type) {
                /* We already saw a definition of this type
                   in the definition module.
                */
+               assert(df->df_type != 0);
+
                if (!TstProcEquiv(tp, df->df_type)) {
                        error("inconsistent procedure declaration for \"%s\"",
                              df->df_idf->id_text);