Hello world, I have committed the two test cases below as obviously correct after testing.
They stress bounds checking on matmul by having an argument whose size cannot be predicted at compile-time. Regards Thomas 2015-05-17 Thomas Koenig <tkoe...@gcc.gnu.org> PR fortran/37131 * gfortran.dg/matmul_bounds_6.f90: New test. * gfortran.dg/matmul_bounds_7.f90: New test.
! { dg-do run } program main real, dimension(3,2) :: a real, dimension(6) :: b real, dimension(3) :: res1 real, dimension(:), allocatable :: c1, c2,c3 real, dimension(2) :: res2 data a /-2., 3., -5., 7., -11., 13./ data b /17., -23., 29., -31., 37., -41./ data res1 /201., -320., 336./ data res2 /158., -353./ c1 = matmul(a,[29.,37.]) if (size(c1,1) /= 3) call abort if (any(c1/=res1)) call abort c2 = matmul(a,pack(b,[b>20.])) if (size(c1,1) /= 3) call abort if (any(c1/=res1)) call abort c3 = matmul(pack(b,[b<0.]),a) if (size(c3,1) /= 2) call abort if (any(c3 /= res2)) call abort end program main
! { dg-do run } ! { dg-additional-options "-fcheck=bounds" } ! { dg-shouldfail "Fortran runtime error: dimension of array B incorrect in MATMUL intrinsic" } program main real, dimension(3,2) :: a real, dimension(6) :: b real, dimension(:), allocatable :: c data a /-2., 3., -5., 7., -11., 13./ data b /17., -23., 29., -31., 37., -41./ c = matmul(pack(b,[b<20.]),a) print *,sum(c) end program main