57 lines
1.3 KiB
Fortran
57 lines
1.3 KiB
Fortran
! { dg-do run }
|
|
! Tests the fix for PR34471 in which function KINDs that were
|
|
! USE associated would cause an error.
|
|
!
|
|
! This only needs to be run once.
|
|
! { dg-options "-O2" }
|
|
!
|
|
! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
|
|
!
|
|
module m1
|
|
integer, parameter :: i1 = 1, i2 = 2
|
|
end module m1
|
|
|
|
module m2
|
|
integer, parameter :: i1 = 8
|
|
end module m2
|
|
|
|
integer(i1) function three()
|
|
use m1, only: i2
|
|
use m2 ! This provides the function kind
|
|
three = i1
|
|
if(three /= kind(three)) call abort()
|
|
end function three
|
|
|
|
! At one stage during the development of the patch, this started failing
|
|
! but was not tested in gfortran.dg. */
|
|
real (kind(0d0)) function foo ()
|
|
foo = real (kind (foo))
|
|
end function
|
|
|
|
program main
|
|
implicit none
|
|
interface
|
|
integer(8) function three()
|
|
end function three
|
|
end interface
|
|
integer, parameter :: i1 = 4
|
|
integer :: i
|
|
real (kind(0d0)) foo
|
|
i = one()
|
|
i = two()
|
|
if(three() /= 8) call abort()
|
|
if (int(foo()) /= 8) call abort ()
|
|
contains
|
|
integer(i1) function one() ! Host associated kind
|
|
if (kind(one) /= 4) call abort()
|
|
one = 1
|
|
end function one
|
|
integer(i1) function two() ! Use associated kind
|
|
use m1, only: i2
|
|
use m2
|
|
if (kind(two) /= 8) call abort()
|
|
two = 1
|
|
end function two
|
|
end program main
|
|
! { dg-final { cleanup-modules "m1 m2" } }
|