Hi Mikael, >> Still to do: Bounds checking (a rather big one), > ... as you do a front-end to front-end transformation, you get bounds > checking for free, don't you?
Only partially. What the patch does is integer i,j,k c = 0 do j=0, size(b,2)-1 do k=0, size(a, 2)-1 do i=0, size(a, 1)-1 c(i * stride(c,1) + lbound(c,1), j * stride(c,2) + lbound(c,2)) = c(i * stride(c,1) + lbound(c,1), j * stride(c,2) + lbound(c,2)) + a(i * stride(a,1) + lbound(a,1), k * stride(a,2) + lbound(a,2)) * b(k * stride(b,1) + lbound(b,1), j * stride(b,2) + lbound(b,2)) end do end do end do If size(b,2) < size(c,2) or size(a,1) < size(c,1) or size(a,2) < size(b,1), this will not get caught - no array bounds violation in the DO loops, but illegal code nonetheless. Also, the error message is different, which should also be changed. What I would like to add to check before the loop, and then add a "do not bounds-check" flag to the reference. Thomas