(truthvalue_conversion): Fix handling of COMPLEX_EXPR.
authorRichard Stallman <rms@gnu.org>
Thu, 4 Mar 1993 20:34:56 +0000 (20:34 +0000)
committerRichard Stallman <rms@gnu.org>
Thu, 4 Mar 1993 20:34:56 +0000 (20:34 +0000)
Handle all complex values specially.

From-SVN: r3645

gcc/c-common.c

index 8dfc1e725d419c38d3149f2ef0314d16ff1269f9..db0a5e11e72358da44784d4ef8d2ac08a96cddbe 100644 (file)
@@ -967,9 +967,10 @@ truthvalue_conversion (expr)
        return integer_one_node;
 
     case COMPLEX_EXPR:
-      return build_binary_op (TRUTH_ANDIF_EXPR,
-                             truthvalue_conversion (TREE_REALPART (expr)),
-                             truthvalue_conversion (TREE_IMAGPART (expr)),
+      return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
+                              ? TRUTH_AND_EXPR : TRUTH_ANDIF_EXPR),
+                             truthvalue_conversion (TREE_OPERAND (expr, 0)),
+                             truthvalue_conversion (TREE_OPERAND (expr, 1)),
                              0);
 
     case NEGATE_EXPR:
@@ -1027,6 +1028,14 @@ truthvalue_conversion (expr)
       break;
     }
 
+  if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
+    return (build_binary_op
+           ((TREE_SIDE_EFFECTS (expr)
+             ? TRUTH_AND_EXPR : TRUTH_ANDIF_EXPR),
+            truthvalue_conversion (build_unary_op (REALPART_EXPR, expr, 0)),
+            truthvalue_conversion (build_unary_op (IMAGPART_EXPR, expr, 0)),
+            0));
+
   return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
 }
 \f