There seems to be a small bug when writing an 8 byte integer to a character
variable, as shown by this little test program:

program IntAdtest

  integer, parameter :: i8_ = Selected_Int_Kind(18)  ! = integer*8
  character(len=22) :: str_value
  integer(i8_) :: value
  character(len=*), parameter :: format_IntAd  = "(i22)"

  value = -9223372036854775807_i8_
  write(str_value, format_IntAd) value
  print *,"str_value = ["//str_value//"]"

  value = -9223372036854775807_i8_ -1
  write(str_value, format_IntAd) value
  print *,"str_value = ["//str_value//"]"

end program IntAdtest

When compiled with: gfortran -o IntAdtest IntAdtest.F90
I get the following output for the gfortran compiled executable:

>IntAdtest
 str_value = [  -9223372036854775807]
 str_value = [ --9223372036854775808]

For all several other compilers the result is as expected:

>IntAdtest
 str_value = [  -9223372036854775807]
 str_value = [  -9223372036854775808]

I used the following gfortran version for this test:

gfortran --version
GNU Fortran (GCC) 4.4.0 20081021 (experimental) [trunk revision 141258]
Copyright (C) 2008 Free Software Foundation, Inc.

best regards,

Jos de Kloe


-- 
           Summary: double minus sign when printing integer?
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: kloedej at knmi dot nl


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38504

Reply via email to