! { 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