Message ID | 7838faa1-6549-c85f-7131-e0a7bd124957@charter.net |
---|---|
State | New |
Headers | show |
Series | [libfortran] PR95647 operator(.eq.) and operator(==) treated differently | expand |
Hi Jerry, On 12.02.21 04:02, Jerry DeLisle wrote: > The attached patch is another provided from Steve Kargle in the PR > report. > I have created a test case and regression tested the result. > > OK for trunk? LGTM except: > libgfortran/ChangeLog: > > PR libfortran 95647 Syntax is "PR <component>/<number", i.e. there should be a '/' before the number. Thanks, Tobias > * ieee/ieee_arithmetic.F90: Flip interfaces of operators .eq. to > == and .ne. to /= . > > gcc/testsuite/ChangeLog: > > PR libfortran 95647 > * gfortran.dg/ieee/ieee_arithmetic: New test. ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstrasse 201, 80634 München Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Frank Thürauf
How do I get permissions set so that I can change status of bug reports and assign to myself. My permissions got dissolved during some evolution in the last year. also The master branch has been updated by Jerry DeLisle<jvdelisle@gcc.gnu.org>: https://gcc.gnu.org/g:0631e008adc759cc801d0d034224ee6b4bcf31aa commit r11-7225-g0631e008adc759cc801d0d034224ee6b4bcf31aa Author: Steve Kargl<sgk@troutmask.apl.washington.edu> Date: Fri Feb 12 07:58:16 2021 -0800 On 2/11/21 7:02 PM, Jerry DeLisle wrote: > The attached patch is another provided from Steve Kargle in the PR > report. > > I have created a test case and regression tested the result. > > OK for trunk? > > Regards, > > Jerry > > 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-11 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_arithmetic: New test. >
diff --git a/gcc/testsuite/gfortran.dg/ieee/ieee_12.f90 b/gcc/testsuite/gfortran.dg/ieee/ieee_12.f90 new file mode 100644 index 00000000000..139a70142b8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ieee/ieee_12.f90 @@ -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 + diff --git a/libgfortran/ieee/ieee_arithmetic.F90 b/libgfortran/ieee/ieee_arithmetic.F90 index 55992232ce2..35a16938f8e 100644 --- a/libgfortran/ieee/ieee_arithmetic.F90 +++ b/libgfortran/ieee/ieee_arithmetic.F90 @@ -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