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).