This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/32083] bug in transfer integer->real->integer
- From: "dfranke at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 25 May 2007 10:45:03 -0000
- Subject: [Bug fortran/32083] bug in transfer integer->real->integer
- References: <bug-32083-11277@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #1 from dfranke at gcc dot gnu dot org 2007-05-25 11:45 -------
Shortened testcase to compare variable vs. parameter in tree dump:
$> cat pr32083.f90
PROGRAM TestInfinite
integer(8), parameter :: bit_pattern_NegInf_i8_p = -4503599627370496_8
integer(8) :: bit_pattern_NegInf_i8 = -4503599627370496_8
integer(8) :: i
real(8) :: r
r = transfer(bit_pattern_NegInf_i8,r)
i = transfer(r,i)
r = transfer(bit_pattern_NegInf_i8_p,r)
i = transfer(r,i)
END PROGRAM TestInfinite
$> gfortran-svn -Wall -std=f95 -fdump-tree-original pr32083.f90
$> cat pr32083.f90.003t.original
MAIN__ ()
{
static int8 bit_pattern_neginf_i8 = -0x10000000000000;
real8 r;
int8 i;
_gfortran_set_std (2, 11, 0, 0, 0);
{
real8 transfer.0;
__builtin_memcpy ((void *) &transfer.0, (void *) &bit_pattern_neginf_i8,
8);
r = transfer.0;
}
{
int8 transfer.1;
__builtin_memcpy ((void *) &transfer.1, (void *) &r, 8);
i = transfer.1;
}
r = Inf;
{
int8 transfer.2;
__builtin_memcpy ((void *) &transfer.2, (void *) &r, 8);
i = transfer.2;
}
}
While the first two transfer operations are translated into corresponding
blocks, the third is not. Observe the line
r = Inf;
--
dfranke at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |dfranke at gcc dot gnu dot
| |org
OtherBugsDependingO| |31237
nThis| |
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2007-05-25 11:45:00
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32083