diff options
author | Craig Burley <burley@gnu.org> | 1998-08-05 07:19:05 -0400 |
---|---|---|
committer | Dave Love <fx@gcc.gnu.org> | 1998-08-05 11:19:05 +0000 |
commit | a74de6ea6859b83927debfd99a95bf9fbc74b657 (patch) | |
tree | c485faacf988fb08a67553e024d1f38d10a03917 /gcc/f | |
parent | a16be296490bc7b31d2718accf4334a3f51d9758 (diff) | |
download | gcc-a74de6ea6859b83927debfd99a95bf9fbc74b657.zip gcc-a74de6ea6859b83927debfd99a95bf9fbc74b657.tar.gz gcc-a74de6ea6859b83927debfd99a95bf9fbc74b657.tar.bz2 |
com.c (ffecom_convert_narrow_, [...]): Allow conversion from pointer to same-sized integer...
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
Diffstat (limited to 'gcc/f')
-rw-r--r-- | gcc/f/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/f/com.c | 14 |
2 files changed, 16 insertions, 4 deletions
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog index 806841a..d9fd6ef 100644 --- a/gcc/f/ChangeLog +++ b/gcc/f/ChangeLog @@ -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. diff --git a/gcc/f/com.c b/gcc/f/com.c index 269477d..fc1f6a5 100644 --- a/gcc/f/com.c +++ b/gcc/f/com.c @@ -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) |