title: Fortran array cannot be returned in function: not a DUMMY variable
body: <p>Being new to Fortran 90 free-form, I would really like to know why the following piece of code snippet would not work:</p>
  
  <pre><code>program test2
      implicit none
      !!! A program to practice f90 writing.
      ! Define double precision data
      integer, parameter :: dp = kind(1.d0)
      real(dp) :: a(3), b(3)
      integer :: i
      a = (/(i, i=1, 3)/)
      b = (/(i, i=1, 3)/)
      write (*, *) m31tensorprod(a, b)
  
  contains
      function m31tensorprod(a, b)
          real(dp), dimension(3), intent(in) :: a, b
          real(dp), intent(out) :: m31tensorprod(3, 3)
          integer :: k1, k2
          forall(k1=1:3, k2=1:3)
              m31tensorprod(k1, k2) = a(k1) * b(k2)
          end forall
          return
      end function m31tensorprod
  end program test2
  </code></pre>
  
  <p>When I try to compile this via gfortran test2.f90, it says:</p>
  
  <blockquote>
    <p>test2.f90:13.4:</p>
  
  <pre><code>function m31tensorprod(a, b)
  1 Error: Symbol at (1) is not a DUMMY variable
  </code></pre>
  </blockquote>
  
  <p>I thought because <code>m31tensorprod</code> is an internal function, it shouldn't need to be declared. Where did I do wrong?</p>
  
  <p>Thanks,</p>