1! { dg-do compile } 2! { dg-options "-O2" } 3! 4! PR fortran/54884 5! 6! Check that get_key_len is not optimized away as it 7! is used in a publicly visible specification expression. 8! 9 10module m 11 private 12 public :: foo 13 interface foo 14 module procedure bar 15 end interface foo 16contains 17 pure function mylen() 18 integer :: mylen 19 mylen = 42 20 end function mylen 21 pure function myotherlen() 22 integer :: myotherlen 23 myotherlen = 99 24 end function myotherlen 25 subroutine bar(x) 26 character(len=mylen()) :: x 27 character :: z2(myotherlen()) 28 call internal(x) 29 block 30 character(len=myotherlen()) :: z 31 z = "abc" 32 x(1:5) = z 33 end block 34 x(6:10) = intern_func() 35 contains 36 function intern_func() 37 character(len=myotherlen()) :: intern_func 38 intern_func = "zuzu" 39 end function intern_func 40 subroutine internal(y) 41 character(len=myotherlen()) :: y 42 y = "abc" 43 end subroutine internal 44 end subroutine bar 45end module m 46 47! { dg-final { scan-assembler-not "__m_MOD_myotherlen" } } 48! { dg-final { scan-assembler "__m_MOD_bar" } } 49! { dg-final { scan-assembler "__m_MOD_mylen" } } 50