com.c (ffecom_convert_narrow_, [...]): Allow conversion from pointer to same-sized...
authorCraig Burley <burley@gnu.org>
Wed, 5 Aug 1998 11:19:05 +0000 (07:19 -0400)
committerDave Love <fx@gcc.gnu.org>
Wed, 5 Aug 1998 11:19:05 +0000 (11:19 +0000)
Tue Aug  4 16:59:39 1998  Craig Burley  <burley@gnu.org>
* com.c (ffecom_convert_narrow_, ffecom_convert_widen_):
Allow conversion from pointer to same-sized integer,
to fix invoking SIGNAL as a function.

[[Split portion of a mixed commit.]]

From-SVN: r21617.2

gcc/f/ChangeLog
gcc/f/com.c

index 806841a40b3ee3eb2f3f30e2cdb1ade9e939b4e5..d9fd6ef121818139cf87dc253ab8be2f2e40668d 100644 (file)
@@ -1,3 +1,9 @@
+Tue Aug  4 16:59:39 1998  Craig Burley  <burley@gnu.org>
+
+       * com.c (ffecom_convert_narrow_, ffecom_convert_widen_):
+       Allow conversion from pointer to same-sized integer,
+       to fix invoking SIGNAL as a function.
+
 1998-07-26  Dave Love  <d.love@dl.ac.uk>
 
        * BUGS, INSTALL, NEWS: Rebuilt.
index 269477dfc6723fc8335914d22557dc4d1aba0566..fc1f6a5fc7718e23fa866925c4155c87e063fb18 100644 (file)
@@ -922,8 +922,11 @@ ffecom_convert_narrow_ (type, expr)
   assert (code != ENUMERAL_TYPE);
   if (code == INTEGER_TYPE)
     {
-      assert (TREE_CODE (TREE_TYPE (e)) == INTEGER_TYPE);
-      assert (TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (e)));
+      assert ((TREE_CODE (TREE_TYPE (e)) == INTEGER_TYPE
+              && TYPE_PRECISION (type) <= TYPE_PRECISION (TREE_TYPE (e)))
+             || (TREE_CODE (TREE_TYPE (e)) == POINTER_TYPE
+                 && (TYPE_PRECISION (type)
+                     == TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (e))))));
       return fold (convert_to_integer (type, e));
     }
   if (code == POINTER_TYPE)
@@ -992,8 +995,11 @@ ffecom_convert_widen_ (type, expr)
   assert (code != ENUMERAL_TYPE);
   if (code == INTEGER_TYPE)
     {
-      assert (TREE_CODE (TREE_TYPE (e)) == INTEGER_TYPE);
-      assert (TYPE_PRECISION (type) >= TYPE_PRECISION (TREE_TYPE (e)));
+      assert ((TREE_CODE (TREE_TYPE (e)) == INTEGER_TYPE
+              && TYPE_PRECISION (type) >= TYPE_PRECISION (TREE_TYPE (e)))
+             || (TREE_CODE (TREE_TYPE (e)) == POINTER_TYPE
+                 && (TYPE_PRECISION (type)
+                     == TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (e))))));
       return fold (convert_to_integer (type, e));
     }
   if (code == POINTER_TYPE)