1! { dg-do compile }
2! Testcase from PR 25396: User defined operators returning arrays.
3module geometry
4
5  implicit none
6
7  interface operator(.cross.)
8     module procedure cross
9  end interface
10
11contains
12
13    ! Cross product between two 3d vectors.
14    pure function cross(a, b)
15      real, dimension(3), intent(in) :: a,b
16      real, dimension(3) :: cross
17
18     cross = (/ a(2) * b(3) - a(3) * b(2), &
19           a(3) * b(1) - a(1) * b(3), &
20           a(1) * b(2) - a(2) * b(1) /)
21    end function cross
22
23end module geometry
24
25program opshape
26  use geometry
27
28  implicit none
29
30  real :: t(3,3), a
31
32  a = dot_product (t(:,1), t(:,2) .cross. t(:,3))
33
34end program opshape
35