------- Comment #2 from tkoenig at gcc dot gnu dot org  2008-05-18 10:42 -------
The problem is with the array parameter.

$ cat spread.f90
  implicit none
  character(len=5), dimension(3,3), parameter :: &
    p = reshape(["a", "b", "c", "d", "e", "f", "g", "h", "i"], [3,3])
  character(len=5), dimension(3,3) :: m1
  m1 = p
  print '(18A)', spread (p, 1, 2)//"z"
  print '(18A)', spread (m1, 1, 2)//"z"
end
$ gfortran -fdump-tree-original -g spread.f90
$ gdb ./a.out
Breakpoint 1 (_gfortran_spread_char) pending.
(gdb) r
Starting program: /tmp/a.out
Breakpoint 2 at 0xb7f69f13: file
../../../../gcc/trunk/libgfortran/intrinsics/spread_generic.c, line 421.
Pending breakpoint "_gfortran_spread_char" resolved

Breakpoint 2, *_gfortran_spread_char (ret=0xbfe7d7b8, ret_length=5,
source=0xbfe7d80c,
    along=0x8048dd4, pncopies=0x8048dd0, source_length=5)
    at ../../../../gcc/trunk/libgfortran/intrinsics/spread_generic.c:422
422       spread_internal (ret, source, along, pncopies, source_length);
(gdb) p *source
$1 = {data = 0xbfe7d827 "a    b    c    ç¿\001", offset = 0, dtype = 369, dim =
{{
      stride = 1, lbound = 0, ubound = 2}, {stride = 1627389952, lbound =
538976288,
      ubound = 538976354}, {stride = 538993440, lbound = -1075372000, ubound =
1}, {
      stride = 0, lbound = -1075324808, ubound = -1208419248}, {stride =
-1075324752,
      lbound = -1209229152, ubound = -1075317768}, {stride = -1075324652,
      lbound = -1075324808, ubound = 134515769}, {stride = 1, lbound =
-1075324652,
      ubound = -1075324792}}}

This is seriously flawed.  The data pointer is wrong, as is the dtype.

Using m1 is ok:

(gdb) c
Continuing.
a    za    zb    zb    zc    zc    z

Breakpoint 2, *_gfortran_spread_char (ret=0xbfe7d758, ret_length=5,
source=0xbfe7d7b8,
    along=0x8048dd4, pncopies=0x8048dd0, source_length=5)
    at ../../../../gcc/trunk/libgfortran/intrinsics/spread_generic.c:422
422       spread_internal (ret, source, along, pncopies, source_length);
(gdb) p *source
$2 = {data = 0xbfe7d78b "a    b    c    d    e    f    g    h    i   
\213×ç¿üÿÿÿr\001",
  offset = 4294967292, dtype = 370, dim = {{stride = 1, lbound = 1, ubound =
3}, {
      stride = 3, lbound = 1, ubound = 3}, {stride = -1208504320, lbound =
543414304,
      ubound = 2048925728}, {stride = -1075324928, lbound = 0, ubound = 0},
{stride = 1,
      lbound = 0, ubound = 2}, {stride = 134516032, lbound = 134516037,
      ubound = 134516042}, {stride = -1075324889, lbound = 0, ubound = 369}}}


-- 

tkoenig at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|SPREAD gives wrong results  |SPREAD gives wrong results
                   |with CHARACTER variables    |with array CHARACTER
                   |                            |parameters


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

Reply via email to