fixed problem with void returns and changed a warning somewhat
authorceriel <none@none>
Thu, 15 Jun 1989 19:06:56 +0000 (19:06 +0000)
committerceriel <none@none>
Thu, 15 Jun 1989 19:06:56 +0000 (19:06 +0000)
lang/cem/cemcom/arith.c
lang/cem/cemcom/eval.c

index 234cc5d..19a9a9f 100644 (file)
@@ -112,15 +112,17 @@ ch76pointer(expp, oper, tp)
                        ch7cast(expp, oper, tp);
        }
        else
-       if (    is_integral_type(exp->ex_type)
-#ifndef NOROPTION
-               &&
-               (       !options['R'] /* we don't care */ ||
-                       (oper == EQUAL || oper == NOTEQUAL || oper == ':')
-               )
-#endif NOROPTION
-       )               /* ch 7.7 */
+       if (is_integral_type(exp->ex_type)) {
+               if (    (oper != EQUAL && oper != NOTEQUAL && oper != ':') ||
+                       (!is_cp_cst(exp) || exp->VL_VALUE != 0)
+               ) {     /* ch 7.6, ch 7.7 */
+                       expr_warning(exp, "%s on %s and pointer",
+                                         symbol2str(oper),
+                                         symbol2str(exp->ex_type->tp_fund)
+                               );
+               }
                ch7cast(expp, CAST, tp);
+       }
        else    {
                expr_error(exp, "%s on %s and pointer",
                                symbol2str(oper),
index b4f6d86..352d10a 100644 (file)
@@ -69,7 +69,7 @@ EVAL(expr, val, code, true_label, false_label)
        int val, code;
        label true_label, false_label;
 {
-       register int gencode = (code == TRUE);
+       register int gencode = (code == TRUE && expr->ex_type->tp_size > 0);
 
        switch (expr->ex_class) {
        case Value:     /* just a simple value  */