Dear Paul,
first, thanks for the patch.
There is one thing it does not appear to do correctly: It should
also set the dtype on the variable itself:
ig25@linux-fd1f:~/Krempel/H> cat mm.f90
program main
implicit none
integer, parameter :: m=10, n=12, count=4
double precision :: a(m, count), b(count, n), c(m, n)
double precision, dimension(:,:), allocatable :: tmp
call random_number(a)
call random_number(b)
tmp = matmul(a,b)
print *,tmp
end program main
ig25@linux-fd1f:~/Krempel/H> gfortran -fdump-tree-original mm.f90
ig25@linux-fd1f:~/Krempel/H> ./a.out
At line 10 of file mm.f90 (unit = 6, file = 'stdout')
Internal Error: list_formatted_write(): Bad type
Apparently, the dtype of tmp is never set:
ig25@linux-fd1f:~/Krempel/H> grep tmp mm.f90.003t.original
struct array2_real(kind=8) tmp;
tmp.data = 0B;
D.1573 = tmp;
D.1574 = (void *) tmp.data;
tmp.data = D.1573.data;
_gfortran_transfer_array_write (&dt_parm.4, &tmp, 8, 0);
if (tmp.data != 0B)
__builtin_free ((void *) tmp.data);
tmp.data = 0B;
Regards,
Thomas