too many changes: some cosmetic; some for 2/4; some for added options
authorceriel <none@none>
Mon, 21 Mar 1988 17:06:20 +0000 (17:06 +0000)
committerceriel <none@none>
Mon, 21 Mar 1988 17:06:20 +0000 (17:06 +0000)
lang/m2/comp/cstoper.c
lang/m2/comp/declar.g

index 62987f0..9224aef 100644 (file)
@@ -38,7 +38,17 @@ extern char options[];
 overflow(expp)
        t_node *expp;
 {
-       node_warning(expp, W_ORDINARY, "overflow in constant expression");
+       if (expp->nd_type != address_type) {
+           node_warning(expp, W_ORDINARY, "overflow in constant expression");
+       }
+}
+
+underflow(expp)
+       t_node *expp;
+{
+       if (expp->nd_type != address_type) {
+           node_warning(expp, W_ORDINARY, "underflow in constant expression");
+       }
 }
 
 STATIC
@@ -295,10 +305,10 @@ cstubin(expp)
                        if (expp->nd_type->tp_fund == T_INTORCARD) {
                                expp->nd_type = int_type;
                                if (! chk_bounds(min_int[sz], o1 - o2, T_CARDINAL)) {
-                                       overflow(expp);
+                                       underflow(expp);
                                }
                        }
-                       else    overflow(expp);
+                       else    underflow(expp);
                }
                o1 -= o2;
                break;
index dbab52f..f19168a 100644 (file)
@@ -150,10 +150,7 @@ FPSection(t_param **ppr; arith *parmaddr;)
                        { EnterParamList(ppr, FPList, tp, VARp, parmaddr); }
 ;
 
-FormalType(t_type **ptp;)
-{
-       extern arith ArrayElSize();
-} :
+FormalType(t_type **ptp;) :
        ARRAY OF qualtype(ptp)
                { /* index type of conformant array is "CARDINAL".
                     Recognize a conformant array by size 0.
@@ -162,11 +159,10 @@ FormalType(t_type **ptp;)
 
                  tp->arr_elem = *ptp;
                  *ptp = tp;
-                 tp->arr_elsize = ArrayElSize(tp->arr_elem);
-                 tp->tp_align = tp->arr_elem->tp_align;
+                 ArrayElSize(tp);
                }
 |
-        qualtype(ptp)
+       qualtype(ptp)
 ;
 
 TypeDeclaration
@@ -289,7 +285,7 @@ RecordType(t_type **ptp;)
                        warning(W_ORDINARY, "empty record declaration");
                        size = 1;
                  }
-                 *ptp = standard_type(T_RECORD, xalign, size);
+                 *ptp = standard_type(T_RECORD, xalign, align(size, xalign));
                  (*ptp)->rec_scope = scope;
                }
        END
@@ -408,8 +404,7 @@ CaseLabels(t_type **ptp; register t_node **pnd;)
 }:
        ConstExpression(pnd)
                        { 
-                         if (*ptp != 0) {
-                               ChkCompat(pnd, *ptp, "case label");
+                         if (*ptp != 0 && ChkCompat(pnd, *ptp, "case label")) {
                          }
                          nd = *pnd;
                          if (! (nd->nd_type->tp_fund & T_DISCRETE) ||