! { dg-do compile }
|
! { dg-do compile }
|
! Tests the fix for PR20880, which was due to failure to the failure
|
! Tests the fix for PR20880, which was due to failure to the failure
|
! to detect the USE association of a nameless interface for a
|
! to detect the USE association of a nameless interface for a
|
! procedure with the same name as the encompassing scope.
|
! procedure with the same name as the encompassing scope.
|
!
|
!
|
! Contributed by Joost VandeVondele
|
! Contributed by Joost VandeVondele
|
!
|
!
|
module test_mod
|
module test_mod
|
interface
|
interface
|
subroutine my_sub (a)
|
subroutine my_sub (a)
|
real a
|
real a
|
end subroutine
|
end subroutine
|
end interface
|
end interface
|
interface
|
interface
|
function my_fun (a)
|
function my_fun (a)
|
real a, my_fun
|
real a, my_fun
|
end function
|
end function
|
end interface
|
end interface
|
end module
|
end module
|
|
|
module test_mod2
|
module test_mod2
|
interface
|
interface
|
function my_fun (a)
|
function my_fun (a)
|
real a, my_fun
|
real a, my_fun
|
end function
|
end function
|
end interface
|
end interface
|
end module
|
end module
|
|
|
|
|
! This is the original PR, excepting that the error requires the symbol
|
! This is the original PR, excepting that the error requires the symbol
|
! to be referenced.
|
! to be referenced.
|
subroutine my_sub (a)
|
subroutine my_sub (a)
|
use test_mod
|
use test_mod
|
real a
|
real a
|
call my_sub (a) ! { dg-error "ambiguous reference" }
|
call my_sub (a) ! { dg-error "ambiguous reference" }
|
print *, a
|
print *, a
|
end subroutine
|
end subroutine
|
|
|
integer function my_fun (a)
|
integer function my_fun (a)
|
use test_mod
|
use test_mod
|
real a
|
real a
|
print *, a
|
print *, a
|
my_fun = 1 ! { dg-error "ambiguous reference" }
|
my_fun = 1 ! { dg-error "ambiguous reference" }
|
end function
|
end function
|
|
|
! This was found whilst investigating => segfault
|
! This was found whilst investigating => segfault
|
subroutine thy_sub (a)
|
subroutine thy_sub (a)
|
interface
|
interface
|
subroutine thy_sub (a) ! { dg-error "enclosing procedure" }
|
subroutine thy_sub (a) ! { dg-error "enclosing procedure" }
|
real a
|
real a
|
end subroutine
|
end subroutine
|
end interface
|
end interface
|
real a
|
real a
|
print *, a
|
print *, a
|
end subroutine
|
end subroutine
|
|
|
subroutine thy_fun (a)
|
subroutine thy_fun (a)
|
use test_mod
|
use test_mod
|
use test_mod2 ! OK because there is no reference to my_fun
|
use test_mod2 ! OK because there is no reference to my_fun
|
print *, a
|
print *, a
|
end subroutine thy_fun
|
end subroutine thy_fun
|
|
|
subroutine his_fun (a)
|
subroutine his_fun (a)
|
use test_mod
|
use test_mod
|
use test_mod2
|
use test_mod2
|
print *, my_fun (a) ! { dg-error "ambiguous reference" }
|
print *, my_fun (a) ! { dg-error "ambiguous reference" }
|
end subroutine his_fun
|
end subroutine his_fun
|
|
|
! { dg-final { cleanup-modules "test_mod test_mod2" } }
|
! { dg-final { cleanup-modules "test_mod test_mod2" } }
|
|
|