view gcc/testsuite/gfortran.dg/dec_parameter_1.f @ 120:f93fa5091070

fix conv1.c
author mir3636
date Thu, 08 Mar 2018 14:53:42 +0900
parents 04ced10e8804
children 84e7813d76e9
line wrap: on
line source

        ! { dg-do run }
        ! { dg-options "-ffixed-form -std=legacy" }
        !
        ! Test DEC-style PARAMETER statements without parentheses in
        ! fixed 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
          ! 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
          z = two * pi_3 * f_3 * 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
          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
          call abort()
        endif

        end