Retro68/gcc/gcc/testsuite/gfortran.dg/public_private_module_8.f90
2014-09-21 19:33:12 +02:00

50 lines
1.1 KiB
Fortran

! { dg-do compile }
! { dg-options "-O2" }
!
! PR fortran/54884
!
! Check that get_key_len is not optimized away as it
! is used in a publicly visible specification expression.
!
module m
private
public :: foo
interface foo
module procedure bar
end interface foo
contains
pure function mylen()
integer :: mylen
mylen = 42
end function mylen
pure function myotherlen()
integer :: myotherlen
myotherlen = 99
end function myotherlen
subroutine bar(x)
character(len=mylen()) :: x
character :: z2(myotherlen())
call internal(x)
block
character(len=myotherlen()) :: z
z = "abc"
x(1:5) = z
end block
x(6:10) = intern_func()
contains
function intern_func()
character(len=myotherlen()) :: intern_func
intern_func = "zuzu"
end function intern_func
subroutine internal(y)
character(len=myotherlen()) :: y
y = "abc"
end subroutine internal
end subroutine bar
end module m
! { dg-final { scan-assembler-not "__m_MOD_myotherlen" } }
! { dg-final { scan-assembler "__m_MOD_bar" } }
! { dg-final { scan-assembler "__m_MOD_mylen" } }