summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/interface_3.f90
blob: 0a23fb09806c3ae960a34b1acee11573316d5016 (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
57
58
59
60
61
62
63
64
65
66
67
68
69
! { dg-do compile }
! Tests the fix for PR20880, which was due to failure to the failure
! to detect the USE association of a nameless interface for a
! procedure with the same name as the encompassing scope.
!
! Contributed by Joost VandeVondele  <jv244@cam.ac.uk>
!
module test_mod
interface
  subroutine my_sub (a)
    real a
  end subroutine
end interface
interface
  function my_fun (a)
    real a, my_fun
  end function
end interface
end module

module test_mod2
interface
  function my_fun (a)
    real a, my_fun
  end function
end interface
end module


! This is the original PR, excepting that the error requires the symbol
! to be referenced.
subroutine my_sub (a)
  use test_mod
  real a
  call my_sub (a)  ! { dg-error "ambiguous reference" }
  print *, a
end subroutine

integer function my_fun (a)
  use test_mod
  real a
  print *, a
  my_fun = 1  ! { dg-error "ambiguous reference" }
end function

! This was found whilst investigating => segfault
subroutine thy_sub (a)
  interface 
    subroutine thy_sub (a) ! { dg-error "enclosing procedure" }
      real a
    end subroutine
  end interface
  real a
  print *, a
end subroutine

subroutine thy_fun (a)
  use test_mod
  use test_mod2  ! OK because there is no reference to my_fun
  print *, a
end subroutine thy_fun

subroutine his_fun (a)
  use test_mod
  use test_mod2
  print *, my_fun (a)  ! { dg-error "ambiguous reference" }
end subroutine his_fun

! { dg-final { cleanup-modules "test_mod test_mod2" } }