aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/matmul_10.f90
blob: a4a2589796fce41b9d68f05807b2289d162ad86e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
! { dg-do run }
! { dg-options "-Warray-temporaries" }
! PR 71961 - no array temporary was created.
! Original test case by Joost VandeVondele
program main
  implicit none
  integer :: i
  integer, dimension(:,:), pointer :: a
  integer, dimension(:,:), allocatable :: b
  ALLOCATE(a(4,4),b(4,2))
  a=1 ; b=2
  a(:,1:2)=matmul(a(:,1:4),b(:,:)) ! { dg-warning "Creating array temporary" }
  if (any(a /= reshape((/8,8,8,8,8,8,8,8,1,1,1,1,1,1,1,1/),(/4,4/)))) &
       STOP 1
  a = reshape([((-1**i)*i,i=1,16)],[4,4])
  b = reshape([((-1**(i-1))*i**2,i=1,8)],[4,2])
  b(1:2,1:2) = matmul(a(1:2,:),b) ! { dg-warning "Creating array temporary" }
  if (any(b /= reshape([310, 340, -9, -16, 1478, 1652, -49, -64],[4,2]))) &
       STOP 2
  deallocate(a)
  deallocate(b)
end program main