------- Additional Comments From Thomas dot Koenig at online dot de  2005-03-09 
23:33 -------
This looks very much like a front end bug.  The
"along" parameter gets the wrong value.

Look at this:

$ cat test_spread.f90
program test_spread
   implicit none
   integer, parameter :: N = 1000
   integer            :: I
   integer, dimension(N) :: source
   integer, dimension(N,N) :: sink
   do i = 1 , N
      source(i) = N
   end do
   print *,'product'
   sink = spread( source , 1 , N ) * spread( source , N , N )
   print *, sink
   stop
end program test_spread
$ gfortran -fdump-tree-original test_spread.f90
>From the *.t02.original file:

  L.2:;
  _gfortran_filename = "test_spread.f90";
  _gfortran_line = 10;
  _gfortran_ioparm.unit = 6;
  _gfortran_ioparm.list_format = 1;
  _gfortran_st_write ();
  _gfortran_transfer_character ("product", 7);
  _gfortran_st_write_done ();
  {
    int4 C.512 = 1000;
    int4 C.511 = 1000;
    struct array1_int4 parm.3;
    struct array2_int4 atmp.2;
    int4 C.492 = 1000;
    int4 C.491 = 1;
    struct array1_int4 parm.1;
    struct array2_int4 atmp.0;

... and further down:

    parm.1.dtype = 265;
    parm.1.dim[0].lbound = 1;
    parm.1.dim[0].ubound = 1000;
    parm.1.dim[0].stride = 1;
    parm.1.data = (int4[0:] *) (int4[0:] *) &source[0];
    parm.1.offset = 0;
    _gfortran_spread (&atmp.0, &parm.1, &C.491, &C.492);
                                                 ^^^^^^
                                            This is =1000, which is bogus

The last parameter of spread is "along", which is supposed
to give the dimension. 1000 is a bit too high :-)



-- 


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

Reply via email to