Consider 

program b
   integer w
   character(len=2) s
   s = 'xi'
   w = scan(s, 'iI')
   print *, s, w
end program b

When compiled and executed, this should produce "xi 2".
Here is NAG's F95 results.
kargl[280] f95 -o z scan1.f90
kargl[281] ./z
 xi 2

Here's the incorrect gfortran results.

kargl[282] gfc41 -static -o z -O -fdump-tree-original scan1.f90
kargl[283] ./z
 xi           0

Here's the tree

MAIN__ ()
{
  char s[1:2];
  int4 w;

  _gfortran_copy_string (2, &s, 2, "xi");
  w = _gfortran_string_scan (2, &s, 2, "iI", 0);
  _gfortran_filename = "scan1.f90";
  _gfortran_line = 6;
  _gfortran_ioparm.unit = 6;
  _gfortran_ioparm.list_format = 1;
  _gfortran_st_write ();
  _gfortran_transfer_character (&s, 2);
  _gfortran_transfer_integer (&w, 4);
  _gfortran_st_write_done ();
}

It looks like either "char s[1:2]" should be "char s[0:1]"
or _gfortran_string_scan (2, &s, 2, "iI", 0) may be indexing
incorrectly.

Yep!  Changing "character(len=2) s" to character(len=3) s" 
gives "xi 2" for the results.


-- 
           Summary: [libfortran] SCAN is broken
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libfortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: kargl at gcc dot gnu dot org


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

Reply via email to