public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/32083] New: bug in transfer integer->real->integer
@ 2007-05-25 10:17 kloedej at knmi dot nl
2007-05-25 10:45 ` [Bug fortran/32083] " dfranke at gcc dot gnu dot org
` (7 more replies)
0 siblings, 8 replies; 9+ messages in thread
From: kloedej at knmi dot nl @ 2007-05-25 10:17 UTC (permalink / raw)
To: gcc-bugs
Hi,
It seems the current gfortran version has a bug when the transfer() function is
called on a parameter holding the bitpattern corresponding to the -Infinite
value.
If a variable with this pattern is transferred from integer->real->integer the
result is just the input. However, when a parameter is transferred in this way,
the sign gets reversed, and the bitpattern for -Infinite is changed into the
bit pattern for +Infinite.
I used the following sample code to test this:
PROGRAM TestInfinite
IMPLICIT NONE
integer, parameter :: i8_ = Selected_Int_Kind(18) ! = integer*8
integer, parameter :: r8_ = Selected_Real_Kind(15,307) ! = real*8
integer(i8_), parameter :: bit_pattern_PosInf_i8_p = 9218868437227405312_i8_
integer(i8_), parameter :: bit_pattern_NegInf_i8_p = -4503599627370496_i8_
integer(i8_) :: bit_pattern_PosInf_i8 = 9218868437227405312_i8_
integer(i8_) :: bit_pattern_NegInf_i8 = -4503599627370496_i8_
integer(i8_) :: bit_pattern_PosInf_i8_hex
integer(i8_) :: bit_pattern_NegInf_i8_hex
integer(i8_) :: i
real(r8_) :: r
data bit_pattern_PosInf_i8_hex /z'7FF0000000000000'/
!data bit_pattern_NegInf_i8_hex /z'FFF0000000000000'/
! not portable, replaced by:
bit_pattern_NegInf_i8_hex = ibset(bit_pattern_PosInf_i8_hex,63)
print *,"testing the values"
print *,"bit_pattern_NegInf_i8_hex = ",bit_pattern_NegInf_i8_hex
print *,"bit pattern NegInf_i8 = ",bit_pattern_NegInf_i8
print *,"bit_pattern_PosInf_i8_hex = ",bit_pattern_PosInf_i8_hex
print *,"bit pattern PosInf_i8 = ",bit_pattern_PosInf_i8
print *,"testing the variable transfers"
print *,"i = ",bit_pattern_PosInf_i8
r = transfer(bit_pattern_PosInf_i8,r)
print *,"r = ",r
i = transfer(r,i)
print *,"i = ",i
print *,"i = ",bit_pattern_NegInf_i8
r = transfer(bit_pattern_NegInf_i8,r)
print *,"r = ",r
i = transfer(r,i)
print *,"i = ",i
print *,"testing the parameter transfers"
print *,"i = ",bit_pattern_PosInf_i8_p
r = transfer(bit_pattern_PosInf_i8_p,r)
print *,"r = ",r
i = transfer(r,i)
print *,"i = ",i
print *,"i = ",bit_pattern_NegInf_i8_p
r = transfer(bit_pattern_NegInf_i8_p,r)
print *,"r = ",r
i = transfer(r,i)
print *,"i = ",i
END PROGRAM TestInfinite
This program generates the following output on my machine:
12:11pm bhw034 72 >TestInf
testing the values
bit_pattern_NegInf_i8_hex = -4503599627370496
bit pattern NegInf_i8 = -4503599627370496
bit_pattern_PosInf_i8_hex = 9218868437227405312
bit pattern PosInf_i8 = 9218868437227405312
testing the variable transfers
i = 9218868437227405312
r = +Infinity
i = 9218868437227405312
i = -4503599627370496
r = -Infinity
i = -4503599627370496
testing the parameter transfers
i = 9218868437227405312
r = +Infinity
i = 9218868437227405312
i = -4503599627370496
r = +Infinity
i = 9218868437227405312
12:11pm bhw034 73 >
The gfortran version used for testing was:
gfortran -v
Using built-in specs.
Target: i386-pc-linux-gnu
Configured with: /home/fxcoudert/gfortran_nightbuild/trunk/configure
--prefix=/home/fxcoudert/gfortran_nightbuild/irun-20070525
--enable-languages=c,fortran --build=i386-pc-linux-gnu
--enable-checking=release
--with-gmp=/home/fxcoudert/gfortran_nightbuild/software
Thread model: posix
gcc version 4.3.0 20070525 (experimental)
best regards,
Jos de Kloe
--
Summary: bug in transfer integer->real->integer
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: kloedej at knmi dot nl
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32083
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug fortran/32083] bug in transfer integer->real->integer
2007-05-25 10:17 [Bug fortran/32083] New: bug in transfer integer->real->integer kloedej at knmi dot nl
@ 2007-05-25 10:45 ` dfranke at gcc dot gnu dot org
2007-05-25 11:37 ` [Bug fortran/32083] [Regression 4.3] " burnus at gcc dot gnu dot org
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: dfranke at gcc dot gnu dot org @ 2007-05-25 10:45 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug fortran/32083] [Regression 4.3] bug in transfer integer->real->integer
2007-05-25 10:17 [Bug fortran/32083] New: bug in transfer integer->real->integer kloedej at knmi dot nl
2007-05-25 10:45 ` [Bug fortran/32083] " dfranke at gcc dot gnu dot org
@ 2007-05-25 11:37 ` burnus at gcc dot gnu dot org
2007-05-26 21:11 ` burnus at gcc dot gnu dot org
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: burnus at gcc dot gnu dot org @ 2007-05-25 11:37 UTC (permalink / raw)
To: gcc-bugs
------- Comment #2 from burnus at gcc dot gnu dot org 2007-05-25 12:37 -------
This is a regression with regard to 4.2.0.
Brooks, you were looking for transfer regressions, weren't you?
(Just for completeness, 2007-05-15 r124736 is working, 2007-05-16 r124759 is
failing.)
--
burnus at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |brooks at gcc dot gnu dot
| |org, burnus at gcc dot gnu
| |dot org
Keywords| |wrong-code
Known to fail| |4.3.0 4.1.2
Known to work| |4.1.3 4.2.0
Summary|bug in transfer integer- |[Regression 4.3] bug in
|>real->integer |transfer integer->real-
| |>integer
Target Milestone|--- |4.3.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32083
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug fortran/32083] [Regression 4.3] bug in transfer integer->real->integer
2007-05-25 10:17 [Bug fortran/32083] New: bug in transfer integer->real->integer kloedej at knmi dot nl
2007-05-25 10:45 ` [Bug fortran/32083] " dfranke at gcc dot gnu dot org
2007-05-25 11:37 ` [Bug fortran/32083] [Regression 4.3] " burnus at gcc dot gnu dot org
@ 2007-05-26 21:11 ` burnus at gcc dot gnu dot org
2007-05-26 22:00 ` patchapp at dberlin dot org
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: burnus at gcc dot gnu dot org @ 2007-05-26 21:11 UTC (permalink / raw)
To: gcc-bugs
------- Comment #3 from burnus at gcc dot gnu dot org 2007-05-26 21:11 -------
Found it finally:
Index: real.c
===================================================================
--- real.c (revision 125096)
+++ real.c (working copy)
@@ -4746,7 +4746,7 @@
/* Take care of Infinity and NaN. */
if (r->cl == rvc_inf)
{
- mpfr_set_inf (m, r->sign);
+ mpfr_set_inf (m, r->sign == 1 ? -1 : 1);
return;
}
--
burnus at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |burnus at gcc dot gnu dot
|dot org |org
Status|NEW |ASSIGNED
Last reconfirmed|2007-05-25 11:45:00 |2007-05-26 21:11:18
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32083
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug fortran/32083] [Regression 4.3] bug in transfer integer->real->integer
2007-05-25 10:17 [Bug fortran/32083] New: bug in transfer integer->real->integer kloedej at knmi dot nl
` (2 preceding siblings ...)
2007-05-26 21:11 ` burnus at gcc dot gnu dot org
@ 2007-05-26 22:00 ` patchapp at dberlin dot org
2007-05-27 8:10 ` [Bug middle-end/32083] [4.3 Regression] " burnus at gcc dot gnu dot org
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: patchapp at dberlin dot org @ 2007-05-26 22:00 UTC (permalink / raw)
To: gcc-bugs
------- Comment #4 from patchapp at dberlin dot org 2007-05-26 22:00 -------
Subject: Bug number PR32083
A patch for this bug has been added to the patch tracker.
The mailing list url for the patch is
http://gcc.gnu.org/ml/gcc-patches/2007-05/msg01803.html
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32083
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug middle-end/32083] [4.3 Regression] bug in transfer integer->real->integer
2007-05-25 10:17 [Bug fortran/32083] New: bug in transfer integer->real->integer kloedej at knmi dot nl
` (3 preceding siblings ...)
2007-05-26 22:00 ` patchapp at dberlin dot org
@ 2007-05-27 8:10 ` burnus at gcc dot gnu dot org
2007-05-27 8:18 ` burnus at gcc dot gnu dot org
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: burnus at gcc dot gnu dot org @ 2007-05-27 8:10 UTC (permalink / raw)
To: gcc-bugs
------- Comment #5 from burnus at gcc dot gnu dot org 2007-05-27 08:10 -------
Subject: Bug 32083
Author: burnus
Date: Sun May 27 08:09:51 2007
New Revision: 125108
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=125108
Log:
2007-05-26 Tobias Burnus <burnus@net-b.de>
PR fortran/32083
* real.c (mpfr_from_real): Fix sign of -Inf.
2007-05-26 Tobias Burnus <burnus@net-b.de>
PR fortran/32083
* gfortran.dg/transfer_simplify_3.f90: New.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/real.c
trunk/gcc/testsuite/ChangeLog
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32083
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug middle-end/32083] [4.3 Regression] bug in transfer integer->real->integer
2007-05-25 10:17 [Bug fortran/32083] New: bug in transfer integer->real->integer kloedej at knmi dot nl
` (4 preceding siblings ...)
2007-05-27 8:10 ` [Bug middle-end/32083] [4.3 Regression] " burnus at gcc dot gnu dot org
@ 2007-05-27 8:18 ` burnus at gcc dot gnu dot org
2007-05-27 13:57 ` burnus at gcc dot gnu dot org
2007-05-29 7:30 ` kloedej at knmi dot nl
7 siblings, 0 replies; 9+ messages in thread
From: burnus at gcc dot gnu dot org @ 2007-05-27 8:18 UTC (permalink / raw)
To: gcc-bugs
------- Comment #6 from burnus at gcc dot gnu dot org 2007-05-27 08:18 -------
Fixed.
--
burnus at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution| |FIXED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32083
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug middle-end/32083] [4.3 Regression] bug in transfer integer->real->integer
2007-05-25 10:17 [Bug fortran/32083] New: bug in transfer integer->real->integer kloedej at knmi dot nl
` (5 preceding siblings ...)
2007-05-27 8:18 ` burnus at gcc dot gnu dot org
@ 2007-05-27 13:57 ` burnus at gcc dot gnu dot org
2007-05-29 7:30 ` kloedej at knmi dot nl
7 siblings, 0 replies; 9+ messages in thread
From: burnus at gcc dot gnu dot org @ 2007-05-27 13:57 UTC (permalink / raw)
To: gcc-bugs
------- Comment #7 from burnus at gcc dot gnu dot org 2007-05-27 13:57 -------
Subject: Bug 32083
Author: burnus
Date: Sun May 27 13:57:03 2007
New Revision: 125110
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=125110
Log:
(svn add was forgotten)
2007-05-27 Tobias Burnus <burnus@net-b.de>
PR middle-end/32083
* gfortran.dg/transfer_simplify_3.f90: New.
Added:
trunk/gcc/testsuite/gfortran.dg/transfer_simplify_3.f90
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32083
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug middle-end/32083] [4.3 Regression] bug in transfer integer->real->integer
2007-05-25 10:17 [Bug fortran/32083] New: bug in transfer integer->real->integer kloedej at knmi dot nl
` (6 preceding siblings ...)
2007-05-27 13:57 ` burnus at gcc dot gnu dot org
@ 2007-05-29 7:30 ` kloedej at knmi dot nl
7 siblings, 0 replies; 9+ messages in thread
From: kloedej at knmi dot nl @ 2007-05-29 7:30 UTC (permalink / raw)
To: gcc-bugs
------- Comment #8 from kloedej at knmi dot nl 2007-05-29 07:29 -------
(In reply to comment #7)
Hi,
this is just to report that my code works again as expected.
Thanks a lot for the fast fix of this bug!
Jos de Kloe
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32083
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2007-05-29 7:30 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-05-25 10:17 [Bug fortran/32083] New: bug in transfer integer->real->integer kloedej at knmi dot nl
2007-05-25 10:45 ` [Bug fortran/32083] " dfranke at gcc dot gnu dot org
2007-05-25 11:37 ` [Bug fortran/32083] [Regression 4.3] " burnus at gcc dot gnu dot org
2007-05-26 21:11 ` burnus at gcc dot gnu dot org
2007-05-26 22:00 ` patchapp at dberlin dot org
2007-05-27 8:10 ` [Bug middle-end/32083] [4.3 Regression] " burnus at gcc dot gnu dot org
2007-05-27 8:18 ` burnus at gcc dot gnu dot org
2007-05-27 13:57 ` burnus at gcc dot gnu dot org
2007-05-29 7:30 ` kloedej at knmi dot nl
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).