summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/function_kinds_4.f90
blob: bcde1e4478e2d85d13f118141cb96deb02866d06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
! { 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" } }