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

--- Comment #2 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
>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.
 ---

In the test case here, m = 0

Now digging in a little, look at the results here:

program oops

  integer(8) :: x

  x = -huge(x) - 1
  print *, huge(x)
  print *, -huge(x)
  print *, x
  print *, -huge(x) - 1
  print *, -x

  print '("      huge = <",B64,">")', huge(x)
  print '("     -huge = <",B64,">")', -huge(x)
  print '("-huge -1   = <",B64,">")', x
  print '("-huge -1   = <",B64,">")', -huge(x) - 1

end program
!<                                                                >

$ gfc -fcheck=all -Wall pr117820.f90 
$ ./a.out 
  9223372036854775807
 -9223372036854775807
 -9223372036854775808
 -9223372036854775808
 -9223372036854775808
      huge = < 111111111111111111111111111111111111111111111111111111111111111>
     -huge = <1000000000000000000000000000000000000000000000000000000000000001>
-huge -1   = <1000000000000000000000000000000000000000000000000000000000000000>
-huge -1   = <1000000000000000000000000000000000000000000000000000000000000000>

The -9223372036854775808 exceeds the range of kind=8 integer. Using
-frange-check does not catch all of these.

If I add a couple more print statements:

  print *, -9223372036854775807
  print *, -9223372036854775808

$ gfc -frange-check -Wall pr117820.f90 
pr117820.f90:16:31:

   16 |   print *, -9223372036854775807
      |                               1
Error: Integer too big for its kind at (1). This check can be disabled with the
option ‘-fno-range-check’
pr117820.f90:17:31:

   17 |   print *, -9223372036854775808
      |                               1
Error: Integer too big for its kind at (1). This check can be disabled with the
option ‘-fno-range-check’

The error at line 16 is not correct.

Steve, do you have any comments here.

Reply via email to