mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-23 19:03:59 +08:00
libgfortran: Fix PR95647 by changing the interfaces of operators .eq. and .ne.
The FE converts the old school .eq. to ==, and then tracks the ==. The module starts with == and so it does not properly overload the .eq. Reversing the interfaces fixes this. 2021-02-12 Steve Kargl <sgk@troutmask.apl.washington.edu> libgfortran/ChangeLog: PR libfortran/95647 * ieee/ieee_arithmetic.F90: Flip interfaces of operators .eq. to == and .ne. to /= . gcc/testsuite/ChangeLog: PR libfortran/95647 * gfortran.dg/ieee/ieee_12.f90: New test.
This commit is contained in:
parent
adfee3c4c0
commit
0631e008ad
24
gcc/testsuite/gfortran.dg/ieee/ieee_12.f90
Normal file
24
gcc/testsuite/gfortran.dg/ieee/ieee_12.f90
Normal file
@ -0,0 +1,24 @@
|
||||
! { dg-do run }
|
||||
! PR95647 operator(.eq.) and operator(==) treated differently
|
||||
program test
|
||||
use, intrinsic :: ieee_arithmetic, only : &
|
||||
& ieee_class, &
|
||||
& ieee_class_type, &
|
||||
& ieee_negative_normal, &
|
||||
& ieee_positive_normal, &
|
||||
& operator(.eq.), operator(.ne.)
|
||||
integer :: good
|
||||
real(4) r4
|
||||
type(ieee_class_type) class1
|
||||
good = 0
|
||||
r4 = 1.0
|
||||
class1 = ieee_class(r4)
|
||||
if (class1 .eq. ieee_positive_normal) good = good + 1
|
||||
if (class1 .ne. ieee_negative_normal) good = good + 1
|
||||
r4 = -1.0
|
||||
class1 = ieee_class(r4)
|
||||
if (class1 .eq. ieee_negative_normal) good = good + 1
|
||||
if (class1 .ne. ieee_positive_normal) good = good + 1
|
||||
if (good /= 4) call abort
|
||||
end program test
|
||||
|
@ -77,15 +77,16 @@ module IEEE_ARITHMETIC
|
||||
|
||||
|
||||
! Equality operators on the derived types
|
||||
interface operator (==)
|
||||
! Note, the FE overloads .eq. to == and .ne. to /=
|
||||
interface operator (.eq.)
|
||||
module procedure IEEE_CLASS_TYPE_EQ, IEEE_ROUND_TYPE_EQ
|
||||
end interface
|
||||
public :: operator(==)
|
||||
public :: operator(.eq.)
|
||||
|
||||
interface operator (/=)
|
||||
interface operator (.ne.)
|
||||
module procedure IEEE_CLASS_TYPE_NE, IEEE_ROUND_TYPE_NE
|
||||
end interface
|
||||
public :: operator (/=)
|
||||
public :: operator (.ne.)
|
||||
|
||||
|
||||
! IEEE_IS_FINITE
|
||||
|
Loading…
Reference in New Issue
Block a user