! { dg-do run }
! { dg-options "-ffree-form -std=legacy" }
!
! Test DEC-style PARAMETER statements without parentheses in free form.
!

subroutine sub1(t, x, y)
  implicit real(8) (A-H,O-Z)
  parameter   (pi_1 = 3.141592654d0, f_1 = 3.d08)
  parameter    pi_2 = 3.141592654d0, f_2 = 3.d08 ! legacy PARAMETER
  ! Note that if the parameter statements above are matched
  ! incorrectly as assignments, the below specification
  ! statements will be considered out-of-order and we see
  ! 'unexpected specification statement'. A PARAMETER
  ! statement should still be a specification statement.

  real(8), intent(in) :: t
  real(8), intent(out) :: x, y

  real(8), volatile :: two
  two = 2.0d0
  x = two * pi_1 * f_1 * t
  y = two * pi_2 * f_2 * t
  return
end subroutine

subroutine sub2(t, x, y, z)
  implicit none
  real(8) :: pi_1, pi_2, f_1, f_2
           parameter   (pi_1 = 3.141592654d0, f_1 = 3.d08)
           parameter    pi_2 = 3.141592654d0, f_2 = 3.d08 ! legacy PARAMETER
  real(8), parameter :: pi_3 = 3.141592654d0, f_3 = 3.d08
  ! Ditto sub1

  real(8), intent(in) :: t
  real(8), intent(out) :: x, y, z

  real(8), volatile :: two
  two = 2.0d0
  x = two * pi_1 * f_1 * t
  y = two * pi_2 * f_2 * t
  z = two * pi_3 * f_3 * t
end subroutine

implicit none
real(8) :: x1, x2, y1, y2, z2
real(8), volatile :: t
t = 1.5e-6

call sub1(t, x1, y1)
call sub2(t, x2, y2, z2)

write(*,'(4D18.5)') t, x1, y1
write(*,'(4D18.5)') t, x2, y2, z2

if (x1 .ne. x2 .or. y1 .ne. y2 &
    .or. x1 .ne. y1 .or. x2 .ne. y2 &
    .or. y2 .ne. z2) then
  STOP 1
endif

end
