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

             Bug #: 52724
           Summary: Internal read with character(kind=4) data
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: tkoe...@gcc.gnu.org


This code in io/unit.c looks fishy:

  /* Set initial values for unit parameters.  */
  if (dtp->common.unit)
    {
      iunit->s = open_internal4 (dtp->internal_unit - start_record,
                 dtp->internal_unit_len, -start_record);
      fbuf_init (iunit, 256);
    }
  else
    iunit->s = open_internal (dtp->internal_unit - start_record,
                  dtp->internal_unit_len, -start_record);

because it supposes that an internal unit for character(kind=4) data
has an internal unit number which is unequal to zero.

And, in fact, this fails:

ig25@linux-fd1f:~/Krempel/Opt> cat foo.f90
!234567
      character buffer4(100)
      integer i

      buffer4 = 4_'123'
      read(buffer4,*) i
      print *,i
      end
ig25@linux-fd1f:~/Krempel/Opt> gfortran foo.f90
ig25@linux-fd1f:~/Krempel/Opt> ./a.out
           1

Reply via email to