55 lines
1.3 KiB
Fortran
55 lines
1.3 KiB
Fortran
! { 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 <brooks@gcc.gnu.org>
|
|
! and Tobias Burnus <burnus@gcc.gnu.org>
|
|
!
|
|
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
|
|
! { dg-final { cleanup-modules "kinds mymodule" } }
|