OSDN Git Service

* c-common.c (vector_types_convertible_p): Treat opaque types as
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 11 Jan 2007 23:14:51 +0000 (23:14 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 11 Jan 2007 23:14:51 +0000 (23:14 +0000)
always convertible if they have the same size, but not otherwise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120688 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/c-common.c

index ba94be3..1e737e7 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-11  Joseph Myers  <joseph@codesourcery.com>
+
+       * c-common.c (vector_types_convertible_p): Treat opaque types as
+       always convertible if they have the same size, but not otherwise.
+
 2007-01-11  Steven Bosscher  <steven@gcc.gnu.org>
 
        * ifcvt.c (struct noce_if_info): Add comments to the fields.
index c1661b2..217228d 100644 (file)
@@ -1091,14 +1091,18 @@ bool
 vector_types_convertible_p (tree t1, tree t2, bool emit_lax_note)
 {
   static bool emitted_lax_note = false;
-  bool convertible_lax =
-    targetm.vector_opaque_p (t1)
-    || targetm.vector_opaque_p (t2)
-    || (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
-        && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
-           TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
-       && INTEGRAL_TYPE_P (TREE_TYPE (t1))
-          == INTEGRAL_TYPE_P (TREE_TYPE (t2)));
+  bool convertible_lax;
+
+  if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
+      && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
+    return true;
+
+  convertible_lax =
+    (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
+     && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
+        TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
+     && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
+        == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
 
   if (!convertible_lax || flag_lax_vector_conversions)
     return convertible_lax;