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.