https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117820

--- Comment #5 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
Back to the Standard

>From the standard, the relevent text is: 13.7.2.4 B, O, and Z editing
 ---
The value of m shall not exceed the value of w, except when w is zero. If m is
zero and the internal value consists of all zero bits, the output field
consists of only blank characters. When m and w are both zero, and the internal
value consists of all zero bits, one blank character is produced.
 ---

As see with this example:

program test
  integer(8) :: x
  x = -huge(x) - 1_8

  print '("-huge -1   = <",B64.64,">")', x
  print '("    zero   = <",B64.64,">")', 0_8
  print *,"-------"
  print '("-huge -1   = <",B64.0,">")', x
  print '("    zero   = <",B64.0,">")', 0_8
  print *,"-------"
  print '("-huge -1   = <",B0.0,">")', x
  print '("    zero   = <",B0.0,">")', 0_8
end program

We interpret the "internal value" to not include the sign bit.

$ ./a.out 
-huge -1   = <1000000000000000000000000000000000000000000000000000000000000000>
    zero   = <0000000000000000000000000000000000000000000000000000000000000000>
 -------
-huge -1   = <                                                                >
    zero   = <                                                                >
 -------
-huge -1   = < >
    zero   = < >

I have not found anything in the standard to interpret this otherwise.

Reply via email to