public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high.
@ 2023-08-15 4:41 john.harper at vuw dot ac.nz
2023-08-15 19:45 ` [Bug libfortran/111022] " anlauf at gcc dot gnu.org
` (37 more replies)
0 siblings, 38 replies; 39+ messages in thread
From: john.harper at vuw dot ac.nz @ 2023-08-15 4:41 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
Bug ID: 111022
Summary: ES0.0E0 format gave ES0.dE0 output with d too high.
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: john.harper at vuw dot ac.nz
Target Milestone: ---
This 3-line Fortran program:
print "(ES0.0E0)", -666e0
print "(ES0.0E0)", -666d0
end program
printed
-6.660000000E+2
-6.66000000000000000E+2
but I think it should have printed
-7.E+2
-7.E+2
which is what ifort printed with the same program.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
@ 2023-08-15 19:45 ` anlauf at gcc dot gnu.org
2023-08-15 23:49 ` john.harper at vuw dot ac.nz
` (36 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: anlauf at gcc dot gnu.org @ 2023-08-15 19:45 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
anlauf at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
CC| |jvdelisle at gcc dot gnu.org
Component|fortran |libfortran
Keywords| |wrong-code
Last reconfirmed| |2023-08-15
--- Comment #1 from anlauf at gcc dot gnu.org ---
Confirmed.
@Jerry: can you have a look? F2008 did not specify w=0 for the ES format;
this was added in F2018.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
2023-08-15 19:45 ` [Bug libfortran/111022] " anlauf at gcc dot gnu.org
@ 2023-08-15 23:49 ` john.harper at vuw dot ac.nz
2023-08-16 0:15 ` jvdelisle at gcc dot gnu.org
` (35 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: john.harper at vuw dot ac.nz @ 2023-08-15 23:49 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #2 from john.harper at vuw dot ac.nz ---
Further information on this bug: it affects all four real kinds with all
three of E0.0E0, ES0.0E0 and EN0.0E0 formats. My 15-line test program for
that is attached. I hope it helps.
On Tue, 15 Aug 2023, anlauf at gcc dot gnu.org wrote:
> Date: Tue, 15 Aug 2023 19:45:06 +0000
> From: anlauf at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>
> To: John Harper <john.harper@vuw.ac.nz>
> Subject: [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too
> high.
> Resent-Date: Wed, 16 Aug 2023 07:45:16 +1200 (NZST)
> Resent-From: <john.harper@vuw.ac.nz>
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
>
> anlauf at gcc dot gnu.org changed:
>
> What |Removed |Added
> ----------------------------------------------------------------------------
> Status|UNCONFIRMED |NEW
> Ever confirmed|0 |1
> CC| |jvdelisle at gcc dot gnu.org
> Component|fortran |libfortran
> Keywords| |wrong-code
> Last reconfirmed| |2023-08-15
>
> --- Comment #1 from anlauf at gcc dot gnu.org ---
> Confirmed.
>
> @Jerry: can you have a look? F2008 did not specify w=0 for the ES format;
> this was added in F2018.
>
> --
> You are receiving this mail because:
> You reported the bug.
>
-- John Harper, School of Mathematics and Statistics
Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
e-mail john.harper@vuw.ac.nz
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
2023-08-15 19:45 ` [Bug libfortran/111022] " anlauf at gcc dot gnu.org
2023-08-15 23:49 ` john.harper at vuw dot ac.nz
@ 2023-08-16 0:15 ` jvdelisle at gcc dot gnu.org
2023-08-16 3:39 ` jvdelisle at gcc dot gnu.org
` (34 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2023-08-16 0:15 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |jvdelisle at gcc dot gnu.org
--- Comment #3 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
Yes I will take. I did not notice this change.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (2 preceding siblings ...)
2023-08-16 0:15 ` jvdelisle at gcc dot gnu.org
@ 2023-08-16 3:39 ` jvdelisle at gcc dot gnu.org
2023-08-23 5:46 ` john.harper at vuw dot ac.nz
` (33 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2023-08-16 3:39 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #4 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
The relative text in the standard is:
13.7.2.1 General rules
--- snip ---
(6) On output, with I, B, O, Z, D, E, EN, ES, EX, F, and G editing, the
specified value of the field width w may be zero. In such cases, the processor
selects the smallest positive actual field width that does not result in a
field filled with asterisks. The specified value of w shall not be zero on
input.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (3 preceding siblings ...)
2023-08-16 3:39 ` jvdelisle at gcc dot gnu.org
@ 2023-08-23 5:46 ` john.harper at vuw dot ac.nz
2023-08-25 0:48 ` jvdelisle at gcc dot gnu.org
` (32 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: john.harper at vuw dot ac.nz @ 2023-08-23 5:46 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #5 from john.harper at vuw dot ac.nz ---
True. I reported the bug because in ESw.dEe output format all 3 of w,d,e
may be 0, but gfortran then gave the right numerical result in the wrong
format with my test programs. (I'm told NAG hasn't yet implemented ES0.0E0
but ifort has got it right.)
On Wed, 16 Aug 2023, jvdelisle at gcc dot gnu.org wrote:
> Date: Wed, 16 Aug 2023 03:39:58 +0000
> From: jvdelisle at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>
> To: John Harper <john.harper@vuw.ac.nz>
> Subject: [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too
> high.
> Resent-Date: Wed, 16 Aug 2023 15:40:09 +1200 (NZST)
> Resent-From: <john.harper@vuw.ac.nz>
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
>
> --- Comment #4 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
> The relative text in the standard is:
>
> 13.7.2.1 General rules
> --- snip ---
> (6) On output, with I, B, O, Z, D, E, EN, ES, EX, F, and G editing, the
> specified value of the field width w may be zero. In such cases, the processor
> selects the smallest positive actual field width that does not result in a
> field filled with asterisks. The specified value of w shall not be zero on
> input.
>
> --
> You are receiving this mail because:
> You reported the bug.
>
-- John Harper, School of Mathematics and Statistics
Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
e-mail john.harper@vuw.ac.nz
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (4 preceding siblings ...)
2023-08-23 5:46 ` john.harper at vuw dot ac.nz
@ 2023-08-25 0:48 ` jvdelisle at gcc dot gnu.org
2023-08-26 4:26 ` jvdelisle at gcc dot gnu.org
` (31 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2023-08-25 0:48 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #6 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
(In reply to john.harper from comment #5)
Thanks John, I had a moment to look at this. I know where to do the
implementation but I have not decided how yet.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (5 preceding siblings ...)
2023-08-25 0:48 ` jvdelisle at gcc dot gnu.org
@ 2023-08-26 4:26 ` jvdelisle at gcc dot gnu.org
2023-08-26 5:40 ` john.harper at vuw dot ac.nz
` (30 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2023-08-26 4:26 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
--- Comment #7 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
I don't have ifort installed at the moment. Would someone post the output from
ifort with teste0es0en0.f90 attached to this PR? Much appreciated.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (6 preceding siblings ...)
2023-08-26 4:26 ` jvdelisle at gcc dot gnu.org
@ 2023-08-26 5:40 ` john.harper at vuw dot ac.nz
2023-08-27 15:38 ` jvdelisle at gcc dot gnu.org
` (29 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: john.harper at vuw dot ac.nz @ 2023-08-26 5:40 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #8 from john.harper at vuw dot ac.nz ---
I couldn't see the program teste0es0en0.f90 that is in your bugzilla but
I could see that it does have 691 bytes. So does one of the two versions
that I now have in my own computer. The attachment to this email contains
that version and what ifort did with it. (Of course E0.0E0 is illegal
Fortran but ES0.0E0 and EN0.0E0 are OK according to both the f2018 and
f2023 standards.)
On Sat, 26 Aug 2023, jvdelisle at gcc dot gnu.org wrote:
> Date: Sat, 26 Aug 2023 04:26:51 +0000
> From: jvdelisle at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>
> To: John Harper <john.harper@vuw.ac.nz>
> Subject: [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too
> high.
> Resent-Date: Sat, 26 Aug 2023 16:27:07 +1200 (NZST)
> Resent-From: <john.harper@vuw.ac.nz>
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
>
> Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed:
>
> What |Removed |Added
> ----------------------------------------------------------------------------
> Status|NEW |ASSIGNED
>
> --- Comment #7 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
> I don't have ifort installed at the moment. Would someone post the output from
> ifort with teste0es0en0.f90 attached to this PR? Much appreciated.
>
> --
> You are receiving this mail because:
> You reported the bug.
>
-- John Harper, School of Mathematics and Statistics
Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
e-mail john.harper@vuw.ac.nz
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (7 preceding siblings ...)
2023-08-26 5:40 ` john.harper at vuw dot ac.nz
@ 2023-08-27 15:38 ` jvdelisle at gcc dot gnu.org
2023-08-27 19:41 ` anlauf at gcc dot gnu.org
` (28 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2023-08-27 15:38 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #9 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
I am using this:
program teste0es0en0
integer,parameter::p1 = kind(1e0), p2 = kind(1d0), &
p3 = selected_real_kind(precision(1.0_p2)+1), &
hp = selected_real_kind(precision(1.0_p3)+1), &
p4 = merge(hp,p3,hp>0) ! in gfortran p4 /= p3, in ifort p4 == p3
character(*),parameter:: fmt(3) = "(A,1X,"//[" E","ES","EN"]//"0.0E0) "
integer ifmt
write(*,"(A,4(1X,I0))") 'real kinds',p1,p2,p3,p4
do ifmt = 1,3
write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p1
write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p2
write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p3
if(p3/=p4) write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p4
end do
end program teste0es0en0
And I get the following output with some test patching:
$ ./a.out
real kinds 4 8 10 16
With (A,1X, E0.0E0) 1.E+3
With (A,1X, E0.0E0) 1.E+3
With (A,1X, E0.0E0) 1.E+3
With (A,1X, E0.0E0) 1.E+3
With (A,1X,ES0.0E0) 7.E+2
With (A,1X,ES0.0E0) 7.E+2
With (A,1X,ES0.0E0) 7.E+2
With (A,1X,ES0.0E0) 7.E+2
With (A,1X,EN0.0E0) 666.
With (A,1X,EN0.0E0) 666.
With (A,1X,EN0.0E0) 666.
With (A,1X,EN0.0E0) 666.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (8 preceding siblings ...)
2023-08-27 15:38 ` jvdelisle at gcc dot gnu.org
@ 2023-08-27 19:41 ` anlauf at gcc dot gnu.org
2023-08-27 21:40 ` john.harper at vuw dot ac.nz
` (27 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: anlauf at gcc dot gnu.org @ 2023-08-27 19:41 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #10 from anlauf at gcc dot gnu.org ---
(In reply to Jerry DeLisle from comment #9)
> I am using this:
>
> program teste0es0en0
> integer,parameter::p1 = kind(1e0), p2 = kind(1d0), &
> p3 = selected_real_kind(precision(1.0_p2)+1), &
> hp = selected_real_kind(precision(1.0_p3)+1), &
> p4 = merge(hp,p3,hp>0) ! in gfortran p4 /= p3, in ifort p4 == p3
> character(*),parameter:: fmt(3) = "(A,1X,"//[" E","ES","EN"]//"0.0E0) "
> integer ifmt
> write(*,"(A,4(1X,I0))") 'real kinds',p1,p2,p3,p4
> do ifmt = 1,3
> write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p1
> write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p2
> write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p3
> if(p3/=p4) write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p4
> end do
> end program teste0es0en0
>
> And I get the following output with some test patching:
>
> $ ./a.out
> real kinds 4 8 10 16
> With (A,1X, E0.0E0) 1.E+3
> With (A,1X, E0.0E0) 1.E+3
> With (A,1X, E0.0E0) 1.E+3
> With (A,1X, E0.0E0) 1.E+3
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,EN0.0E0) 666.
> With (A,1X,EN0.0E0) 666.
> With (A,1X,EN0.0E0) 666.
> With (A,1X,EN0.0E0) 666.
Intel does not like E0.0E0, thus running with do ifmt = 2,3 gives:
real kinds 4 8 16 16
With (A,1X,ES0.0E0) 7.+2
With (A,1X,ES0.0E0) 7.+2
With (A,1X,ES0.0E0) 7.+2
With (A,1X,EN0.0E0) 666.+0
With (A,1X,EN0.0E0) 666.+0
With (A,1X,EN0.0E0) 666.+0
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (9 preceding siblings ...)
2023-08-27 19:41 ` anlauf at gcc dot gnu.org
@ 2023-08-27 21:40 ` john.harper at vuw dot ac.nz
2023-08-27 22:17 ` jvdelisle at gcc dot gnu.org
` (26 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: john.harper at vuw dot ac.nz @ 2023-08-27 21:40 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #11 from john.harper at vuw dot ac.nz ---
Jerry's test program is identical with mine.
Because E format is supposed to give no digits before the decimal point
except possibly a leading zero, E0.0 and E0.0E0 are both pointless, and
Steve Lionel pointed out in Fortran Discourse that the standard forbids
them because they would generate an illegal value of k for the kP edit
descriptor (which happens not to be explicitly used here.) So I think
gfortran ought to give a run-time error for it. If I compiled the program
with ifort and more warning options, the first 2 write statements gave
real kinds 4 8 16 16
With (A,1X, E0.0E0) *****************************************
forrtl: error (63): output conversion error, unit 6, file /dev/pts/1
The ES result from gfortran was correct and standard-conforming. The EN
one should have said 666.E+0 not 666.
On Sun, 27 Aug 2023, jvdelisle at gcc dot gnu.org wrote:
> Date: Sun, 27 Aug 2023 15:38:33 +0000
> From: jvdelisle at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>
> To: John Harper <john.harper@vuw.ac.nz>
> Subject: [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too
> high.
> Resent-Date: Mon, 28 Aug 2023 03:38:51 +1200 (NZST)
> Resent-From: <john.harper@vuw.ac.nz>
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
>
> --- Comment #9 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
> I am using this:
>
> program teste0es0en0
> integer,parameter::p1 = kind(1e0), p2 = kind(1d0), &
> p3 = selected_real_kind(precision(1.0_p2)+1), &
> hp = selected_real_kind(precision(1.0_p3)+1), &
> p4 = merge(hp,p3,hp>0) ! in gfortran p4 /= p3, in ifort p4 == p3
> character(*),parameter:: fmt(3) = "(A,1X,"//[" E","ES","EN"]//"0.0E0) "
> integer ifmt
> write(*,"(A,4(1X,I0))") 'real kinds',p1,p2,p3,p4
> do ifmt = 1,3
> write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p1
> write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p2
> write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p3
> if(p3/=p4) write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p4
> end do
> end program teste0es0en0
>
> And I get the following output with some test patching:
>
> $ ./a.out
> real kinds 4 8 10 16
> With (A,1X, E0.0E0) 1.E+3
> With (A,1X, E0.0E0) 1.E+3
> With (A,1X, E0.0E0) 1.E+3
> With (A,1X, E0.0E0) 1.E+3
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,EN0.0E0) 666.
> With (A,1X,EN0.0E0) 666.
> With (A,1X,EN0.0E0) 666.
> With (A,1X,EN0.0E0) 666.
>
> --
> You are receiving this mail because:
> You reported the bug.
>
-- John Harper, School of Mathematics and Statistics
Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
e-mail john.harper@vuw.ac.nz
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (10 preceding siblings ...)
2023-08-27 21:40 ` john.harper at vuw dot ac.nz
@ 2023-08-27 22:17 ` jvdelisle at gcc dot gnu.org
2023-08-28 1:26 ` john.harper at vuw dot ac.nz
` (25 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2023-08-27 22:17 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #12 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
(In reply to john.harper from comment #11)
I have the error check commented out during some of my checking on things. I
will revise the test case to test for the correct error.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (11 preceding siblings ...)
2023-08-27 22:17 ` jvdelisle at gcc dot gnu.org
@ 2023-08-28 1:26 ` john.harper at vuw dot ac.nz
2023-08-28 1:44 ` john.harper at vuw dot ac.nz
` (24 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: john.harper at vuw dot ac.nz @ 2023-08-28 1:26 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #13 from john.harper at vuw dot ac.nz ---
Hmmm. If I read anlauf correctly, our versions of ifort differ when
writing ES0.0E0 and EN0.0E0 with the value 666.0. Both give the same
correct numerical values but one version omits the E in the output.
Omitting it does write the value in the shortest possible space but
disobeys the F2018 and F2023 standards, where 13.7.2.3.4 Table 13.2 and
13.7.2.3.5 Table 13.3 require ENw.dE0 and ESw.dE0 to include E in the
output.
On Sun, 27 Aug 2023, anlauf at gcc dot gnu.org wrote:
> Date: Sun, 27 Aug 2023 19:41:10 +0000
> From: anlauf at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>
> To: John Harper <john.harper@vuw.ac.nz>
> Subject: [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too
> high.
> Resent-Date: Mon, 28 Aug 2023 07:41:23 +1200 (NZST)
> Resent-From: <john.harper@vuw.ac.nz>
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
>
> --- Comment #10 from anlauf at gcc dot gnu.org ---
> (In reply to Jerry DeLisle from comment #9)
>> I am using this:
>>
>> program teste0es0en0
>> integer,parameter::p1 = kind(1e0), p2 = kind(1d0), &
>> p3 = selected_real_kind(precision(1.0_p2)+1), &
>> hp = selected_real_kind(precision(1.0_p3)+1), &
>> p4 = merge(hp,p3,hp>0) ! in gfortran p4 /= p3, in ifort p4 == p3
>> character(*),parameter:: fmt(3) = "(A,1X,"//[" E","ES","EN"]//"0.0E0) "
>> integer ifmt
>> write(*,"(A,4(1X,I0))") 'real kinds',p1,p2,p3,p4
>> do ifmt = 1,3
>> write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p1
>> write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p2
>> write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p3
>> if(p3/=p4) write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p4
>> end do
>> end program teste0es0en0
>>
>> And I get the following output with some test patching:
>>
>> $ ./a.out
>> real kinds 4 8 10 16
>> With (A,1X, E0.0E0) 1.E+3
>> With (A,1X, E0.0E0) 1.E+3
>> With (A,1X, E0.0E0) 1.E+3
>> With (A,1X, E0.0E0) 1.E+3
>> With (A,1X,ES0.0E0) 7.E+2
>> With (A,1X,ES0.0E0) 7.E+2
>> With (A,1X,ES0.0E0) 7.E+2
>> With (A,1X,ES0.0E0) 7.E+2
>> With (A,1X,EN0.0E0) 666.
>> With (A,1X,EN0.0E0) 666.
>> With (A,1X,EN0.0E0) 666.
>> With (A,1X,EN0.0E0) 666.
>
> Intel does not like E0.0E0, thus running with do ifmt = 2,3 gives:
>
> real kinds 4 8 16 16
> With (A,1X,ES0.0E0) 7.+2
> With (A,1X,ES0.0E0) 7.+2
> With (A,1X,ES0.0E0) 7.+2
> With (A,1X,EN0.0E0) 666.+0
> With (A,1X,EN0.0E0) 666.+0
> With (A,1X,EN0.0E0) 666.+0
>
> --
> You are receiving this mail because:
> You reported the bug.
>
-- John Harper, School of Mathematics and Statistics
Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
e-mail john.harper@vuw.ac.nz
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (12 preceding siblings ...)
2023-08-28 1:26 ` john.harper at vuw dot ac.nz
@ 2023-08-28 1:44 ` john.harper at vuw dot ac.nz
2023-08-29 23:45 ` john.harper at vuw dot ac.nz
` (23 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: john.harper at vuw dot ac.nz @ 2023-08-28 1:44 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #14 from john.harper at vuw dot ac.nz ---
To add to my email copied below, you may find a reference to the standards
helpful. k is the scale factor referred to in F2018 or F2023 13.7.2.3.3.
The last paragraph of that says that in Ew.d and Ew.dE0 output format, one
of these two inequalities must be satisfied: -d < k <= 0 or 0 < k < d+2.
With either E0.0 or E0.0E0 the value of k is not permitted.
On Sun, 27 Aug 2023, john.harper at vuw dot ac.nz wrote:
> Date: Sun, 27 Aug 2023 21:40:58 +0000
> From: john.harper at vuw dot ac.nz <gcc-bugzilla@gcc.gnu.org>
> To: John Harper <john.harper@vuw.ac.nz>
> Subject: [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too
> high.
> Resent-Date: Mon, 28 Aug 2023 09:41:10 +1200 (NZST)
> Resent-From: <john.harper@vuw.ac.nz>
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
>
> --- Comment #11 from john.harper at vuw dot ac.nz ---
> Jerry's test program is identical with mine.
> Because E format is supposed to give no digits before the decimal point
> except possibly a leading zero, E0.0 and E0.0E0 are both pointless, and
> Steve Lionel pointed out in Fortran Discourse that the standard forbids
> them because they would generate an illegal value of k for the kP edit
> descriptor (which happens not to be explicitly used here.) So I think
> gfortran ought to give a run-time error for it. If I compiled the program
> with ifort and more warning options, the first 2 write statements gave
>
> real kinds 4 8 16 16
> With (A,1X, E0.0E0) *****************************************
> forrtl: error (63): output conversion error, unit 6, file /dev/pts/1
>
> The ES result from gfortran was correct and standard-conforming. The EN
> one should have said 666.E+0 not 666.
>
> On Sun, 27 Aug 2023, jvdelisle at gcc dot gnu.org wrote:
>
>> Date: Sun, 27 Aug 2023 15:38:33 +0000
>> From: jvdelisle at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>
>> To: John Harper <john.harper@vuw.ac.nz>
>> Subject: [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too
>> high.
>> Resent-Date: Mon, 28 Aug 2023 03:38:51 +1200 (NZST)
>> Resent-From: <john.harper@vuw.ac.nz>
>>
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
>>
>> --- Comment #9 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
>> I am using this:
>>
>> program teste0es0en0
>> integer,parameter::p1 = kind(1e0), p2 = kind(1d0), &
>> p3 = selected_real_kind(precision(1.0_p2)+1), &
>> hp = selected_real_kind(precision(1.0_p3)+1), &
>> p4 = merge(hp,p3,hp>0) ! in gfortran p4 /= p3, in ifort p4 == p3
>> character(*),parameter:: fmt(3) = "(A,1X,"//[" E","ES","EN"]//"0.0E0) "
>> integer ifmt
>> write(*,"(A,4(1X,I0))") 'real kinds',p1,p2,p3,p4
>> do ifmt = 1,3
>> write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p1
>> write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p2
>> write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p3
>> if(p3/=p4) write(*, fmt(ifmt)) 'With '//fmt(ifmt), 666.0_p4
>> end do
>> end program teste0es0en0
>>
>> And I get the following output with some test patching:
>>
>> $ ./a.out
>> real kinds 4 8 10 16
>> With (A,1X, E0.0E0) 1.E+3
>> With (A,1X, E0.0E0) 1.E+3
>> With (A,1X, E0.0E0) 1.E+3
>> With (A,1X, E0.0E0) 1.E+3
>> With (A,1X,ES0.0E0) 7.E+2
>> With (A,1X,ES0.0E0) 7.E+2
>> With (A,1X,ES0.0E0) 7.E+2
>> With (A,1X,ES0.0E0) 7.E+2
>> With (A,1X,EN0.0E0) 666.
>> With (A,1X,EN0.0E0) 666.
>> With (A,1X,EN0.0E0) 666.
>> With (A,1X,EN0.0E0) 666.
>>
>> --
>> You are receiving this mail because:
>> You reported the bug.
>>
>
>
> -- John Harper, School of Mathematics and Statistics
> Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
> e-mail john.harper@vuw.ac.nz
>
> --
> You are receiving this mail because:
> You reported the bug.
>
-- John Harper, School of Mathematics and Statistics
Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
e-mail john.harper@vuw.ac.nz
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (13 preceding siblings ...)
2023-08-28 1:44 ` john.harper at vuw dot ac.nz
@ 2023-08-29 23:45 ` john.harper at vuw dot ac.nz
2023-08-30 0:30 ` jvdelisle at gcc dot gnu.org
` (22 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: john.harper at vuw dot ac.nz @ 2023-08-29 23:45 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #15 from john.harper at vuw dot ac.nz ---
My previous test program tried Ex0.0E0 output but not Ex0.0, where x is
N,S, or absent. Below is a revised version which includes all 6 cases.
It also tries EN and ES before trying E, with an error stop if an error
is detected. Below the program is its output from ifort, which I think
is f2018-compliant, compiled with options -standard-semantics -check all
(All lines of gfortran output after the first appeared to be wrong.)
program testen0es0e0 ! EN0.0,ES0.0 good f2018, E0.0 bad, with E0 or not
integer,parameter::p1 = kind(1e0), p2 = kind(1d0), &
p3 = selected_real_kind(precision(1.0_p2)+1), &
hp = selected_real_kind(precision(1.0_p3)+1), &
p4 = merge(hp,p3,hp>0) ! in gfortran p4 /= p3, in ifort p4 == p3
character:: ens(3)*2=["EN","ES"," E"],e0(2)*2=[" ","E0"], fmt*14, &
msg*200
integer iens,ie0,ios
write(*,"(A,4(1X,I0))") 'real kinds',p1,p2,p3,p4
do iens = 1,3
do ie0 = 1,2
fmt = "(A,1X,"//ens(iens)//"0.0"//e0(ie0)//")"
write(*, fmt,iostat=ios,iomsg=msg) 'With '//fmt, 666.0_p1
if(ios/=0) error stop trim(msg)
write(*, fmt) 'With '//fmt, 666.0_p2
write(*, fmt) 'With '//fmt, 666.0_p3
if(p3/=p4) write(*, fmt) 'With '//fmt, 666.0_p4
end do
end do
end program testen0es0e0
real kinds 4 8 16 16
With (A,1X,EN0.0 ) 666.E+00
With (A,1X,EN0.0 ) 666.E+00
With (A,1X,EN0.0 ) 666.E+00
With (A,1X,EN0.0E0) 666.E+0
With (A,1X,EN0.0E0) 666.E+0
With (A,1X,EN0.0E0) 666.E+0
With (A,1X,ES0.0 ) 7.E+02
With (A,1X,ES0.0 ) 7.E+02
With (A,1X,ES0.0 ) 7.E+02
With (A,1X,ES0.0E0) 7.E+2
With (A,1X,ES0.0E0) 7.E+2
With (A,1X,ES0.0E0) 7.E+2
With (A,1X, E0.0 ) *****************************************
output conversion error, unit 6, file /dev/pts/0
-- John Harper, School of Mathematics and Statistics
Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
e-mail john.harper@vuw.ac.nz
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (14 preceding siblings ...)
2023-08-29 23:45 ` john.harper at vuw dot ac.nz
@ 2023-08-30 0:30 ` jvdelisle at gcc dot gnu.org
2023-09-03 16:20 ` jvdelisle at gcc dot gnu.org
` (21 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2023-08-30 0:30 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #16 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
(In reply to john.harper from comment #15)
> My previous test program tried Ex0.0E0 output but not Ex0.0, where x is
> N,S, or absent. Below is a revised version which includes all 6 cases.
> It also tries EN and ES before trying E, with an error stop if an error
> is detected. Below the program is its output from ifort, which I think
> is f2018-compliant, compiled with options -standard-semantics -check all
Thanks John, test cases are always helpful.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (15 preceding siblings ...)
2023-08-30 0:30 ` jvdelisle at gcc dot gnu.org
@ 2023-09-03 16:20 ` jvdelisle at gcc dot gnu.org
2023-09-04 17:12 ` jvdelisle at gcc dot gnu.org
` (20 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2023-09-03 16:20 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #17 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
Preliminary patch:
diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c
index 5d47a6d25f7..aafbd96b65a 100644
--- a/libgfortran/io/write.c
+++ b/libgfortran/io/write.c
@@ -1784,8 +1784,6 @@ write_real_w0 (st_parameter_dt *dtp, const char *source,
int kind,
set_fnode_default (dtp, &ff, kind);
- if (f->u.real.d > 0)
- ff.u.real.d = f->u.real.d;
ff.format = f->format;
/* For FMT_G, Compensate for extra digits when using scale factor, d
@@ -1793,11 +1791,17 @@ write_real_w0 (st_parameter_dt *dtp, const char
*source, int kind,
is used. */
if (f->format == FMT_G)
{
+ if (f->u.real.d > 0)
+ ff.u.real.d = f->u.real.d;
if (dtp->u.p.scale_factor > 0 && f->u.real.d == 0)
comp_d = 1;
else
comp_d = 0;
}
+ else
+ if (f->u.real.d >= 0)
+ ff.u.real.d = f->u.real.d;
+
if (f->u.real.e >= 0)
ff.u.real.e = f->u.real.e;
I have regression tested this OK. I do want to watch out for any surprises so I
am still testing.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (16 preceding siblings ...)
2023-09-03 16:20 ` jvdelisle at gcc dot gnu.org
@ 2023-09-04 17:12 ` jvdelisle at gcc dot gnu.org
2023-09-04 18:38 ` anlauf at gcc dot gnu.org
` (19 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2023-09-04 17:12 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #18 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
With Johns test case from Comment #15 and the patch in Comment #17 I get the
following:
$ ./a.out
real kinds 4 8 10 16
With (A,1X,EN0.0 ) 666.
With (A,1X,EN0.0 ) 666.
With (A,1X,EN0.0 ) 666.
With (A,1X,EN0.0 ) 666.
With (A,1X,EN0.0E0) 666.
With (A,1X,EN0.0E0) 666.
With (A,1X,EN0.0E0) 666.
With (A,1X,EN0.0E0) 666.
With (A,1X,ES0.0 ) 7.E+2
With (A,1X,ES0.0 ) 7.E+2
With (A,1X,ES0.0 ) 7.E+2
With (A,1X,ES0.0 ) 7.E+2
With (A,1X,ES0.0E0) 7.E+2
With (A,1X,ES0.0E0) 7.E+2
With (A,1X,ES0.0E0) 7.E+2
With (A,1X,ES0.0E0) 7.E+2
ERROR STOP Scale factor out of range in format specifier 'E' or 'D'
Notice that the width of exponents is also minimized and where the exponent is
zero it is not shown at all. If I do specify an exponent width it shown. For
example with exponent width of 4 and changing the value to 66600 I get:
$ ./a.out
real kinds 4 8 10 16
With (A,1X,EN0.0 ) 67.E+3
With (A,1X,EN0.0 ) 67.E+3
With (A,1X,EN0.0 ) 67.E+3
With (A,1X,EN0.0 ) 67.E+3
With (A,1X,EN0.0E4) 67.E+0003
With (A,1X,EN0.0E4) 67.E+0003
With (A,1X,EN0.0E4) 67.E+0003
With (A,1X,EN0.0E4) 67.E+0003
With (A,1X,ES0.0 ) 7.E+4
With (A,1X,ES0.0 ) 7.E+4
With (A,1X,ES0.0 ) 7.E+4
With (A,1X,ES0.0 ) 7.E+4
With (A,1X,ES0.0E4) 7.E+0004
With (A,1X,ES0.0E4) 7.E+0004
With (A,1X,ES0.0E4) 7.E+0004
With (A,1X,ES0.0E4) 7.E+0004
ERROR STOP Scale factor out of range in format specifier 'E' or 'D'
This seems reasonable to me. Other opinions?
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (17 preceding siblings ...)
2023-09-04 17:12 ` jvdelisle at gcc dot gnu.org
@ 2023-09-04 18:38 ` anlauf at gcc dot gnu.org
2023-09-04 22:32 ` john.harper at vuw dot ac.nz
` (18 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: anlauf at gcc dot gnu.org @ 2023-09-04 18:38 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
anlauf at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |anlauf at gcc dot gnu.org
--- Comment #19 from anlauf at gcc dot gnu.org ---
(In reply to Jerry DeLisle from comment #18)
> With Johns test case from Comment #15 and the patch in Comment #17 I get the
> following:
>
> $ ./a.out
> real kinds 4 8 10 16
> With (A,1X,EN0.0 ) 666.
> With (A,1X,EN0.0 ) 666.
> With (A,1X,EN0.0 ) 666.
> With (A,1X,EN0.0 ) 666.
> With (A,1X,EN0.0E0) 666.
> With (A,1X,EN0.0E0) 666.
> With (A,1X,EN0.0E0) 666.
> With (A,1X,EN0.0E0) 666.
Intel prints
With (A,1X,EN0.0E0) 666.+0
which I think is slightly more in accordance with F2018 Table 13.2,
which requires printing the exponent for the ...E0 version with the
minimum number of digits, which is 1 for a zero exponent.
See the "footnote (1)" there.
Can you please check? Or am I missing something?
> With (A,1X,ES0.0 ) 7.E+2
> With (A,1X,ES0.0 ) 7.E+2
> With (A,1X,ES0.0 ) 7.E+2
> With (A,1X,ES0.0 ) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> ERROR STOP Scale factor out of range in format specifier 'E' or 'D'
>
> Notice that the width of exponents is also minimized and where the exponent
> is zero it is not shown at all. If I do specify an exponent width it shown.
> For example with exponent width of 4 and changing the value to 66600 I get:
>
> $ ./a.out
> real kinds 4 8 10 16
> With (A,1X,EN0.0 ) 67.E+3
> With (A,1X,EN0.0 ) 67.E+3
> With (A,1X,EN0.0 ) 67.E+3
> With (A,1X,EN0.0 ) 67.E+3
> With (A,1X,EN0.0E4) 67.E+0003
> With (A,1X,EN0.0E4) 67.E+0003
> With (A,1X,EN0.0E4) 67.E+0003
> With (A,1X,EN0.0E4) 67.E+0003
> With (A,1X,ES0.0 ) 7.E+4
> With (A,1X,ES0.0 ) 7.E+4
> With (A,1X,ES0.0 ) 7.E+4
> With (A,1X,ES0.0 ) 7.E+4
> With (A,1X,ES0.0E4) 7.E+0004
> With (A,1X,ES0.0E4) 7.E+0004
> With (A,1X,ES0.0E4) 7.E+0004
> With (A,1X,ES0.0E4) 7.E+0004
> ERROR STOP Scale factor out of range in format specifier 'E' or 'D'
>
> This seems reasonable to me. Other opinions?
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (18 preceding siblings ...)
2023-09-04 18:38 ` anlauf at gcc dot gnu.org
@ 2023-09-04 22:32 ` john.harper at vuw dot ac.nz
2023-09-05 2:57 ` jvdelisle at gcc dot gnu.org
` (17 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: john.harper at vuw dot ac.nz @ 2023-09-04 22:32 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #20 from john.harper at vuw dot ac.nz ---
With the first test case all the EN outputs were 666. but the Fortran 2018
standard 13.7.2.3.4 paragraph 2 requires that EN0.0 produce 666.E+0 but
Table 13.2 first ENw.d line appears to require either 666.E+00 or 666.+000
unless my copy of F2018 is out of date. (I note that the F2023 standard
removed the ambiguity by including "with w > 0" in the offending line of
Table 13.2.) However F2018 is unambiguous and agrees with F2023 on
EN0.0E0, requiring 666.E+0
With the second test case, which used 66600, I think all Jerry's outputs
are correct.
On Mon, 4 Sep 2023, jvdelisle at gcc dot gnu.org wrote:
> Date: Mon, 4 Sep 2023 17:12:30 +0000
> From: jvdelisle at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>
> To: John Harper <john.harper@vuw.ac.nz>
> Subject: [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too
> high.
> Resent-Date: Tue, 5 Sep 2023 05:12:45 +1200 (NZST)
> Resent-From: <john.harper@vuw.ac.nz>
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
>
> --- Comment #18 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
> With Johns test case from Comment #15 and the patch in Comment #17 I get the
> following:
>
> $ ./a.out
> real kinds 4 8 10 16
> With (A,1X,EN0.0 ) 666.
> With (A,1X,EN0.0 ) 666.
> With (A,1X,EN0.0 ) 666.
> With (A,1X,EN0.0 ) 666.
> With (A,1X,EN0.0E0) 666.
> With (A,1X,EN0.0E0) 666.
> With (A,1X,EN0.0E0) 666.
> With (A,1X,EN0.0E0) 666.
> With (A,1X,ES0.0 ) 7.E+2
> With (A,1X,ES0.0 ) 7.E+2
> With (A,1X,ES0.0 ) 7.E+2
> With (A,1X,ES0.0 ) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> With (A,1X,ES0.0E0) 7.E+2
> ERROR STOP Scale factor out of range in format specifier 'E' or 'D'
>
> Notice that the width of exponents is also minimized and where the exponent is
> zero it is not shown at all. If I do specify an exponent width it shown. For
> example with exponent width of 4 and changing the value to 66600 I get:
>
> $ ./a.out
> real kinds 4 8 10 16
> With (A,1X,EN0.0 ) 67.E+3
> With (A,1X,EN0.0 ) 67.E+3
> With (A,1X,EN0.0 ) 67.E+3
> With (A,1X,EN0.0 ) 67.E+3
> With (A,1X,EN0.0E4) 67.E+0003
> With (A,1X,EN0.0E4) 67.E+0003
> With (A,1X,EN0.0E4) 67.E+0003
> With (A,1X,EN0.0E4) 67.E+0003
> With (A,1X,ES0.0 ) 7.E+4
> With (A,1X,ES0.0 ) 7.E+4
> With (A,1X,ES0.0 ) 7.E+4
> With (A,1X,ES0.0 ) 7.E+4
> With (A,1X,ES0.0E4) 7.E+0004
> With (A,1X,ES0.0E4) 7.E+0004
> With (A,1X,ES0.0E4) 7.E+0004
> With (A,1X,ES0.0E4) 7.E+0004
> ERROR STOP Scale factor out of range in format specifier 'E' or 'D'
>
> This seems reasonable to me. Other opinions?
>
> --
> You are receiving this mail because:
> You reported the bug.
>
-- John Harper, School of Mathematics and Statistics
Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
e-mail john.harper@vuw.ac.nz
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (19 preceding siblings ...)
2023-09-04 22:32 ` john.harper at vuw dot ac.nz
@ 2023-09-05 2:57 ` jvdelisle at gcc dot gnu.org
2023-10-15 2:12 ` jvdelisle at gcc dot gnu.org
` (16 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2023-09-05 2:57 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #21 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
(In reply to john.harper from comment #20)
> With the first test case all the EN outputs were 666. but the Fortran 2018
> standard 13.7.2.3.4 paragraph 2 requires that EN0.0 produce 666.E+0 but
> Table 13.2 first ENw.d line appears to require either 666.E+00 or 666.+000
> unless my copy of F2018 is out of date. (I note that the F2023 standard
> removed the ambiguity by including "with w > 0" in the offending line of
> Table 13.2.) However F2018 is unambiguous and agrees with F2023 on
> EN0.0E0, requiring 666.E+0
>
> With the second test case, which used 66600, I think all Jerry's outputs
> are correct.
I did not touch the code that writes the Exponent parts yet. So will have a
look.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (20 preceding siblings ...)
2023-09-05 2:57 ` jvdelisle at gcc dot gnu.org
@ 2023-10-15 2:12 ` jvdelisle at gcc dot gnu.org
2023-10-15 7:03 ` john.harper at vuw dot ac.nz
` (15 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2023-10-15 2:12 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #22 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
Sorry for delays. I am back looking at this.
My take on the table 13.2 for the case: EN0.0E0
No matter what the E for the exponent must be shown.
If the exponent is 0 then a plus sign must be shown.
The value for 666. then must be 666.E+0
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (21 preceding siblings ...)
2023-10-15 2:12 ` jvdelisle at gcc dot gnu.org
@ 2023-10-15 7:03 ` john.harper at vuw dot ac.nz
2024-01-25 22:21 ` jvdelisle at gcc dot gnu.org
` (14 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: john.harper at vuw dot ac.nz @ 2023-10-15 7:03 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #23 from john.harper at vuw dot ac.nz ---
Jerry
I agree that that's what the standard says, though I find it odd that it
allows neither 666E0 nor 666E+0 nor 666+0 in output, because any of the
three would be valid input of the real value 666. But you are editing a
compiler to comply with the standard, and neither of us is editing the
standard itself :-)
John
On Sun, 15 Oct 2023, jvdelisle at gcc dot gnu.org wrote:
> Date: Sun, 15 Oct 2023 02:12:25 +0000
> From: jvdelisle at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>
> To: John Harper <john.harper@vuw.ac.nz>
> Subject: [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too
> high.
> Resent-Date: Sun, 15 Oct 2023 15:13:03 +1300 (NZDT)
> Resent-From: <john.harper@vuw.ac.nz>
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
>
> --- Comment #22 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
> Sorry for delays. I am back looking at this.
>
> My take on the table 13.2 for the case: EN0.0E0
>
> No matter what the E for the exponent must be shown.
>
> If the exponent is 0 then a plus sign must be shown.
>
> The value for 666. then must be 666.E+0
>
> --
> You are receiving this mail because:
> You reported the bug.
>
-- John Harper, School of Mathematics and Statistics
Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
e-mail john.harper@vuw.ac.nz
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (22 preceding siblings ...)
2023-10-15 7:03 ` john.harper at vuw dot ac.nz
@ 2024-01-25 22:21 ` jvdelisle at gcc dot gnu.org
2024-01-26 5:24 ` john.harper at vuw dot ac.nz
` (13 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2024-01-25 22:21 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #24 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
Currently gfortran does the following:
character(20) :: fmt
character(9) :: buffer
fmt = "(1a1,d0.2,1a1)"
write(buffer,fmt) ">", 3.0, "<"
print *, buffer
fmt = "(1a1,e0.2,1a1)"
write(buffer,fmt) ">", 3.0, "<"
print *, buffer
end
$ gfc question.f90
$ ./a.out
>0.30D+1<
>0.30E+1<
Why not:
$ ./a.out
>3.00D+0<
>3.00E+0<
What does Intel do?
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (23 preceding siblings ...)
2024-01-25 22:21 ` jvdelisle at gcc dot gnu.org
@ 2024-01-26 5:24 ` john.harper at vuw dot ac.nz
2024-01-26 18:29 ` anlauf at gcc dot gnu.org
` (12 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: john.harper at vuw dot ac.nz @ 2024-01-26 5:24 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #25 from john.harper at vuw dot ac.nz ---
With that program Intel's two compilers (ifort and ifx) both print
>.30D+01<
>.30E+01<
If your program removes the d0.2 stuff and changes e0.2 to es0.2e0, i.e.
character(20) :: fmt
character(9) :: buffer
fmt = "(1a1,es0.2e0,1a1)"
write(buffer,fmt) ">", 3.0, "<"
print *, buffer
end
then both Intel compilers print what you seem to have hoped for:
>3.00E+0<
but my gfortran, gcc version 13.1.0 (Ubuntu 13.1.0-8ubuntu1~22.04), prints
>3.00<
I won't argue about the difference between gfortran's >0.30D+1<
and Intel's >.30D+01< because I have been caught before by whether the
zero before the decimal point and the zero after the D are optional.
The f2018 standard is not easy to read on this.
I tried aocc-flang on your original program, and I ought to send them a
bug report because it printed
><
><
I don't have access to the NAG compiler or anyone else's flang.
John
On Thu, 25 Jan 2024, jvdelisle at gcc dot gnu.org wrote:
> Date: Thu, 25 Jan 2024 22:21:01 +0000
> From: jvdelisle at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>
> To: John Harper <john.harper@vuw.ac.nz>
> Subject: [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too
> high.
> Resent-Date: Fri, 26 Jan 2024 11:21:15 +1300 (NZDT)
> Resent-From: <john.harper@vuw.ac.nz>
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
>
> --- Comment #24 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
> Currently gfortran does the following:
>
> character(20) :: fmt
> character(9) :: buffer
> fmt = "(1a1,d0.2,1a1)"
> write(buffer,fmt) ">", 3.0, "<"
> print *, buffer
> fmt = "(1a1,e0.2,1a1)"
> write(buffer,fmt) ">", 3.0, "<"
> print *, buffer
> end
>
>
> $ gfc question.f90
> $ ./a.out
> >0.30D+1<
> >0.30E+1<
>
> Why not:
>
> $ ./a.out
> >3.00D+0<
> >3.00E+0<
>
> What does Intel do?
>
> --
> You are receiving this mail because:
> You reported the bug.
>
-- John Harper, School of Mathematics and Statistics
Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
e-mail john.harper@vuw.ac.nz
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (24 preceding siblings ...)
2024-01-26 5:24 ` john.harper at vuw dot ac.nz
@ 2024-01-26 18:29 ` anlauf at gcc dot gnu.org
2024-01-26 18:50 ` jvdelisle at gcc dot gnu.org
` (11 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: anlauf at gcc dot gnu.org @ 2024-01-26 18:29 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #26 from anlauf at gcc dot gnu.org ---
(In reply to Jerry DeLisle from comment #24)
> Currently gfortran does the following:
>
> character(20) :: fmt
> character(9) :: buffer
> fmt = "(1a1,d0.2,1a1)"
> write(buffer,fmt) ">", 3.0, "<"
> print *, buffer
> fmt = "(1a1,e0.2,1a1)"
> write(buffer,fmt) ">", 3.0, "<"
> print *, buffer
> end
>
>
> $ gfc question.f90
> $ ./a.out
> >0.30D+1<
> >0.30E+1<
>
> Why not:
>
> $ ./a.out
> >3.00D+0<
> >3.00E+0<
It seems the Fortran standard changed here between F2018 and F2023.
F2018, Table 13.1:
Ew.d |exp| ≤ 99 E±z1z2 or ±0z1 z2
99 < |exp| ≤ 999 ±z1 z2z3
So Intel implements this.
========
F2023, Table 13.1:
Ew.d E0 or E0.d any E±z1 z2 . . . zs
with footnote:
(1) where each z is a digit, and s is the minimum number of digits required to
represent the exponent. A plus sign is produced if the exponent value is zero.
========
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (25 preceding siblings ...)
2024-01-26 18:29 ` anlauf at gcc dot gnu.org
@ 2024-01-26 18:50 ` jvdelisle at gcc dot gnu.org
2024-01-30 13:19 ` jvdelisle at gcc dot gnu.org
` (10 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2024-01-26 18:50 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #27 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
(In reply to anlauf from comment #26)
> (In reply to Jerry DeLisle from comment #24)
> > Currently gfortran does the following:
> >
> > character(20) :: fmt
> > character(9) :: buffer
> > fmt = "(1a1,d0.2,1a1)"
> > write(buffer,fmt) ">", 3.0, "<"
> > print *, buffer
> > fmt = "(1a1,e0.2,1a1)"
> > write(buffer,fmt) ">", 3.0, "<"
> > print *, buffer
> > end
> >
> >
> > $ gfc question.f90
> > $ ./a.out
> > >0.30D+1<
> > >0.30E+1<
> >
> > Why not:
> >
> > $ ./a.out
> > >3.00D+0<
> > >3.00E+0<
>
> It seems the Fortran standard changed here between F2018 and F2023.
>
> F2018, Table 13.1:
>
> Ew.d |exp| ≤ 99 E±z1z2 or ±0z1 z2
> 99 < |exp| ≤ 999 ±z1 z2z3
>
> So Intel implements this.
>
> ========
>
> F2023, Table 13.1:
>
> Ew.d E0 or E0.d any E±z1 z2 . . . zs
>
Yes it changed. I am looking at a lot of different cases here as I have time
and intuitively the 0.30D+1 caught my attention. Its not necessarily related to
this bug. I also have the latest standard (2023) in front of me here.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (26 preceding siblings ...)
2024-01-26 18:50 ` jvdelisle at gcc dot gnu.org
@ 2024-01-30 13:19 ` jvdelisle at gcc dot gnu.org
2024-02-03 17:33 ` cvs-commit at gcc dot gnu.org
` (9 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2024-01-30 13:19 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #28 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
Created attachment 57260
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=57260&action=edit
A final patch
This patch provides the necessary changes with only minor adjustment to
existing gfortran test cases. (This took insanely longer than I had hoped and
such is life.) I am preparing one or two additional test cases and will submit
this for approval on the list.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (27 preceding siblings ...)
2024-01-30 13:19 ` jvdelisle at gcc dot gnu.org
@ 2024-02-03 17:33 ` cvs-commit at gcc dot gnu.org
2024-02-11 22:19 ` nightstrike at gmail dot com
` (8 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-02-03 17:33 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #29 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jerry DeLisle <jvdelisle@gcc.gnu.org>:
https://gcc.gnu.org/g:d436e8e70dacd9c06247bb56d0abeded8fcb4242
commit r14-8779-gd436e8e70dacd9c06247bb56d0abeded8fcb4242
Author: Jerry DeLisle <jvdelisle@gcc.gnu.org>
Date: Fri Feb 2 18:12:33 2024 -0800
libgfortran: EN0.0E0 and ES0.0E0 format editing.
F2018 and F2023 standards added zero width exponents. This required
additional special handing in the process of building formatted
floating point strings.
G formatting uses either F or E formatting as documented in
write_float.def comments. This logic changes the format token from FMT_G
to FMT_F or FMT_E. The new formatting requirements interfere with this
process when a FMT_G float string is being built. To avoid this, a new
component called 'pushed' is added to the fnode structure to save this
condition. The 'pushed' condition is then used to bypass portions of
the new ES,E,EN, and D formatting, falling through to the existing
default formatting which is retained.
libgfortran/ChangeLog:
PR libfortran/111022
* io/format.c (get_fnode): Update initialization of fnode.
(parse_format_list): Initialization.
* io/format.h (struct fnode): Added the new 'pushed' component.
* io/write.c (select_buffer): Whitespace.
(write_real): Whitespace.
(write_real_w0): Adjust logic for the d == 0 condition.
* io/write_float.def (determine_precision): Whitespace.
(build_float_string): Calculate width of ..E0 exponents and
adjust logic accordingly.
(build_infnan_string): Whitespace.
(CALCULATE_EXP): Whitespace.
(quadmath_snprintf): Whitespace.
(determine_en_precision): Whitespace.
gcc/testsuite/ChangeLog:
PR libfortran/111022
* gfortran.dg/fmt_error_10.f: Show D+0 exponent.
* gfortran.dg/pr96436_4.f90: Show E+0 exponent.
* gfortran.dg/pr96436_5.f90: Show E+0 exponent.
* gfortran.dg/pr111022.f90: New test.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (28 preceding siblings ...)
2024-02-03 17:33 ` cvs-commit at gcc dot gnu.org
@ 2024-02-11 22:19 ` nightstrike at gmail dot com
2024-02-11 22:21 ` anlauf at gcc dot gnu.org
` (7 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: nightstrike at gmail dot com @ 2024-02-11 22:19 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
nightstrike <nightstrike at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |nightstrike at gmail dot com
--- Comment #30 from nightstrike <nightstrike at gmail dot com> ---
(In reply to GCC Commits from comment #29)
> * gfortran.dg/pr111022.f90: New test.
This new test fails of x64 mingw.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (29 preceding siblings ...)
2024-02-11 22:19 ` nightstrike at gmail dot com
@ 2024-02-11 22:21 ` anlauf at gcc dot gnu.org
2024-02-11 22:25 ` nightstrike at gmail dot com
` (6 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: anlauf at gcc dot gnu.org @ 2024-02-11 22:21 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #31 from anlauf at gcc dot gnu.org ---
(In reply to nightstrike from comment #30)
> (In reply to GCC Commits from comment #29)
> > * gfortran.dg/pr111022.f90: New test.
>
> This new test fails of x64 mingw.
Can you be more specific?
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (30 preceding siblings ...)
2024-02-11 22:21 ` anlauf at gcc dot gnu.org
@ 2024-02-11 22:25 ` nightstrike at gmail dot com
2024-02-11 22:30 ` nightstrike at gmail dot com
` (5 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: nightstrike at gmail dot com @ 2024-02-11 22:25 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #32 from nightstrike <nightstrike at gmail dot com> ---
(In reply to anlauf from comment #31)
> (In reply to nightstrike from comment #30)
> > (In reply to GCC Commits from comment #29)
> > > * gfortran.dg/pr111022.f90: New test.
> >
> > This new test fails of x64 mingw.
>
> Can you be more specific?
Sure, it exits with STOP 2, which is the following:
write(buffer,"(EN0.3E0)") 6.660_4
if (buffer.ne."6.660E+0") stop 2
I modified that as:
write(buffer,"(EN0.3E0)") 6.660_4
if (buffer.ne."6.660E+0") then
print *, buffer
stop 2
end if
And now it prints:
6.660
STOP 2
So I guess it's losing the E+0 from the string?
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (31 preceding siblings ...)
2024-02-11 22:25 ` nightstrike at gmail dot com
@ 2024-02-11 22:30 ` nightstrike at gmail dot com
2024-02-11 22:58 ` anlauf at gcc dot gnu.org
` (4 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: nightstrike at gmail dot com @ 2024-02-11 22:30 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #33 from nightstrike <nightstrike at gmail dot com> ---
I modified the test further to just print which ones would have called stop.
Almost, but not all, do:
stop 2
stop 3
stop 4
stop 7
stop 8
stop 9
stop 10
stop 11
stop 12
stop 13
stop 15
stop 20
stop 21
stop 22
stop 23
stop 24
stop 25
stop 26
stop 27
stop 28
stop 29
stop 30
stop 31
stop 32
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (32 preceding siblings ...)
2024-02-11 22:30 ` nightstrike at gmail dot com
@ 2024-02-11 22:58 ` anlauf at gcc dot gnu.org
2024-02-12 2:40 ` nightstrike at gmail dot com
` (3 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: anlauf at gcc dot gnu.org @ 2024-02-11 22:58 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #34 from anlauf at gcc dot gnu.org ---
(In reply to nightstrike from comment #33)
> I modified the test further to just print which ones would have called stop.
> Almost, but not all, do:
>
> stop 2
> stop 3
> stop 4
> stop 7
> stop 8
> stop 9
> stop 10
> stop 11
> stop 12
> stop 13
> stop 15
> stop 20
> stop 21
> stop 22
> stop 23
> stop 24
> stop 25
> stop 26
> stop 27
> stop 28
> stop 29
> stop 30
> stop 31
> stop 32
Are you sure that it finds the right new libgfortran?
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (33 preceding siblings ...)
2024-02-11 22:58 ` anlauf at gcc dot gnu.org
@ 2024-02-12 2:40 ` nightstrike at gmail dot com
2024-02-12 20:12 ` jvdelisle at gcc dot gnu.org
` (2 subsequent siblings)
37 siblings, 0 replies; 39+ messages in thread
From: nightstrike at gmail dot com @ 2024-02-12 2:40 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #35 from nightstrike <nightstrike at gmail dot com> ---
(In reply to anlauf from comment #34)
> Are you sure that it finds the right new libgfortran?
Good call. I did a make install first and re-ran it, and they all pass now.
Sorry for the noise, this is an unfortunate aspect of the testsuite where in
many cases it will not use the just-built libraries, but instead picks up the
libraries in the install path.
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (34 preceding siblings ...)
2024-02-12 2:40 ` nightstrike at gmail dot com
@ 2024-02-12 20:12 ` jvdelisle at gcc dot gnu.org
2024-02-13 0:42 ` cvs-commit at gcc dot gnu.org
2024-02-13 0:43 ` jvdelisle at gcc dot gnu.org
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2024-02-12 20:12 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #36 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
I was looking for my damnit doll until I got to your last post. Is this one
worthy of backport?
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (35 preceding siblings ...)
2024-02-12 20:12 ` jvdelisle at gcc dot gnu.org
@ 2024-02-13 0:42 ` cvs-commit at gcc dot gnu.org
2024-02-13 0:43 ` jvdelisle at gcc dot gnu.org
37 siblings, 0 replies; 39+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-02-13 0:42 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
--- Comment #37 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-13 branch has been updated by Jerry DeLisle
<jvdelisle@gcc.gnu.org>:
https://gcc.gnu.org/g:fbe5e908de76aa240bbcd2f144c156eccc863604
commit r13-8321-gfbe5e908de76aa240bbcd2f144c156eccc863604
Author: Jerry DeLisle <jvdelisle@gcc.gnu.org>
Date: Fri Feb 2 18:12:33 2024 -0800
libgfortran: EN0.0E0 and ES0.0E0 format editing.
F2018 and F2023 standards added zero width exponents. This required
additional special handing in the process of building formatted
floating point strings.
G formatting uses either F or E formatting as documented in
write_float.def comments. This logic changes the format token from FMT_G
to FMT_F or FMT_E. The new formatting requirements interfere with this
process when a FMT_G float string is being built. To avoid this, a new
component called 'pushed' is added to the fnode structure to save this
condition. The 'pushed' condition is then used to bypass portions of
the new ES,E,EN, and D formatting, falling through to the existing
default formatting which is retained.
libgfortran/ChangeLog:
PR libfortran/111022
* io/format.c (get_fnode): Update initialization of fnode.
(parse_format_list): Initialization.
* io/format.h (struct fnode): Added the new 'pushed' component.
* io/write.c (select_buffer): Whitespace.
(write_real): Whitespace.
(write_real_w0): Adjust logic for the d == 0 condition.
* io/write_float.def (determine_precision): Whitespace.
(build_float_string): Calculate width of ..E0 exponents and
adjust logic accordingly.
(build_infnan_string): Whitespace.
(CALCULATE_EXP): Whitespace.
(quadmath_snprintf): Whitespace.
(determine_en_precision): Whitespace.
gcc/testsuite/ChangeLog:
PR libfortran/111022
* gfortran.dg/fmt_error_10.f: Show D+0 exponent.
* gfortran.dg/pr96436_4.f90: Show E+0 exponent.
* gfortran.dg/pr96436_5.f90: Show E+0 exponent.
* gfortran.dg/pr111022.f90: New test.
(cherry picked from commit d436e8e70dacd9c06247bb56d0abeded8fcb4242)
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Bug libfortran/111022] ES0.0E0 format gave ES0.dE0 output with d too high.
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
` (36 preceding siblings ...)
2024-02-13 0:42 ` cvs-commit at gcc dot gnu.org
@ 2024-02-13 0:43 ` jvdelisle at gcc dot gnu.org
37 siblings, 0 replies; 39+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2024-02-13 0:43 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111022
Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|ASSIGNED |RESOLVED
--- Comment #38 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
Fixed on trunk and 13
^ permalink raw reply [flat|nested] 39+ messages in thread
end of thread, other threads:[~2024-02-13 0:43 UTC | newest]
Thread overview: 39+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-15 4:41 [Bug fortran/111022] New: ES0.0E0 format gave ES0.dE0 output with d too high john.harper at vuw dot ac.nz
2023-08-15 19:45 ` [Bug libfortran/111022] " anlauf at gcc dot gnu.org
2023-08-15 23:49 ` john.harper at vuw dot ac.nz
2023-08-16 0:15 ` jvdelisle at gcc dot gnu.org
2023-08-16 3:39 ` jvdelisle at gcc dot gnu.org
2023-08-23 5:46 ` john.harper at vuw dot ac.nz
2023-08-25 0:48 ` jvdelisle at gcc dot gnu.org
2023-08-26 4:26 ` jvdelisle at gcc dot gnu.org
2023-08-26 5:40 ` john.harper at vuw dot ac.nz
2023-08-27 15:38 ` jvdelisle at gcc dot gnu.org
2023-08-27 19:41 ` anlauf at gcc dot gnu.org
2023-08-27 21:40 ` john.harper at vuw dot ac.nz
2023-08-27 22:17 ` jvdelisle at gcc dot gnu.org
2023-08-28 1:26 ` john.harper at vuw dot ac.nz
2023-08-28 1:44 ` john.harper at vuw dot ac.nz
2023-08-29 23:45 ` john.harper at vuw dot ac.nz
2023-08-30 0:30 ` jvdelisle at gcc dot gnu.org
2023-09-03 16:20 ` jvdelisle at gcc dot gnu.org
2023-09-04 17:12 ` jvdelisle at gcc dot gnu.org
2023-09-04 18:38 ` anlauf at gcc dot gnu.org
2023-09-04 22:32 ` john.harper at vuw dot ac.nz
2023-09-05 2:57 ` jvdelisle at gcc dot gnu.org
2023-10-15 2:12 ` jvdelisle at gcc dot gnu.org
2023-10-15 7:03 ` john.harper at vuw dot ac.nz
2024-01-25 22:21 ` jvdelisle at gcc dot gnu.org
2024-01-26 5:24 ` john.harper at vuw dot ac.nz
2024-01-26 18:29 ` anlauf at gcc dot gnu.org
2024-01-26 18:50 ` jvdelisle at gcc dot gnu.org
2024-01-30 13:19 ` jvdelisle at gcc dot gnu.org
2024-02-03 17:33 ` cvs-commit at gcc dot gnu.org
2024-02-11 22:19 ` nightstrike at gmail dot com
2024-02-11 22:21 ` anlauf at gcc dot gnu.org
2024-02-11 22:25 ` nightstrike at gmail dot com
2024-02-11 22:30 ` nightstrike at gmail dot com
2024-02-11 22:58 ` anlauf at gcc dot gnu.org
2024-02-12 2:40 ` nightstrike at gmail dot com
2024-02-12 20:12 ` jvdelisle at gcc dot gnu.org
2024-02-13 0:42 ` cvs-commit at gcc dot gnu.org
2024-02-13 0:43 ` jvdelisle at gcc dot gnu.org
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).