re PR fortran/37131 (inline matmul for small matrix sizes)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 17 May 2015 13:45:07 +0000 (13:45 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 17 May 2015 13:45:07 +0000 (13:45 +0000)
2015-05-17  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/37131
* gfortran.dg/matmul_bounds_6.f90:  New test.
* gfortran.dg/matmul_bounds_7.f90:  New test.

From-SVN: r223268

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/matmul_bounds_6.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/matmul_bounds_7.f90 [new file with mode: 0644]

index 5133549afed0f749164e8425c6f17f14b39bf7e5..5a36566b0e49e5df40bc3472c189f183ff0e4726 100644 (file)
@@ -1,3 +1,9 @@
+2015-05-17  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/37131
+       * gfortran.dg/matmul_bounds_6.f90:  New test.
+       * gfortran.dg/matmul_bounds_7.f90:  New test.
+
 2015-05-16  Jan Hubica  <hubicka@ucw.cz>
 
        * gfortran.dg/lto/20091028-2_1.c: Fix return value.
diff --git a/gcc/testsuite/gfortran.dg/matmul_bounds_6.f90 b/gcc/testsuite/gfortran.dg/matmul_bounds_6.f90
new file mode 100644 (file)
index 0000000..7d96c2d
--- /dev/null
@@ -0,0 +1,26 @@
+! { 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
diff --git a/gcc/testsuite/gfortran.dg/matmul_bounds_7.f90 b/gcc/testsuite/gfortran.dg/matmul_bounds_7.f90
new file mode 100644 (file)
index 0000000..616869a
--- /dev/null
@@ -0,0 +1,16 @@
+! { 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