Fix: did generate wrong code for 'if (x && 0) ...'
authorceriel <none@none>
Thu, 29 Mar 1990 11:19:36 +0000 (11:19 +0000)
committerceriel <none@none>
Thu, 29 Mar 1990 11:19:36 +0000 (11:19 +0000)
lang/cem/cemcom/eval.c

index ce0e957..cf87616 100644 (file)
@@ -73,8 +73,16 @@ EVAL(expr, val, code, true_label, false_label)
 
        switch (expr->ex_class) {
        case Value:     /* just a simple value  */
-               if (gencode)
-                       load_val(expr, val);
+               if (gencode) {
+                       if (true_label) {
+                               /* can only result from ','-expressions with
+                                  constant right-hand sides ???
+                               */
+                               ASSERT(is_cp_cst(expr));
+                               C_bra(expr->VL_VALUE == 0 ? false_label : true_label);
+                       }
+                       else load_val(expr, val);
+               }
                break;
        case String:    /* a string constant    */
                if (gencode) {