! { dg-do run } ! Tests the fix for PR31229, PR31154 and PR33334, in which ! the KIND and TYPE parameters in the function declarations ! would cause errors. ! ! Contributed by Brooks Moses ! and Tobias Burnus ! module kinds implicit none integer, parameter :: dp = selected_real_kind(6) type t integer :: i end type t interface real(dp) function y() import end function end interface end module kinds type(t) function func() ! The legal bit of PR33334 use kinds func%i = 5 end function func real(dp) function another_dp_before_defined () use kinds another_dp_before_defined = real (kind (4.0_DP)) end function module mymodule; contains REAL(2*DP) function declared_dp_before_defined() use kinds, only: dp real (dp) :: x declared_dp_before_defined = 1.0_dp x = 1.0_dp declared_dp_before_defined = real (kind (x)) end function end module mymodule use kinds use mymodule type(t), external :: func type(t) :: z if (kind (y ()) .ne. 4) call abort () if (kind (declared_dp_before_defined ()) .ne. 8) call abort () if (int (declared_dp_before_defined ()) .ne. 4) call abort () if (int (another_dp_before_defined ()) .ne. 4) call abort () z = func() if (z%i .ne. 5) call abort () end