! { dg-do compile } ! { dg-options "-O2" } ! ! PR fortran/52751 (top, "module mod") ! PR fortran/40973 (bottom, "module m" ! ! Ensure that (only) those module variables and procedures which are PRIVATE ! and have no C-binding label are optimized away. ! module mod integer :: aa integer, private :: iii integer, private, bind(C) :: jj ! { dg-warning "PRIVATE but has been given the binding label" } integer, private, bind(C,name='lll') :: kk ! { dg-warning "PRIVATE but has been given the binding label" } integer, private, bind(C,name='') :: mmmm integer, bind(C) :: nnn integer, bind(C,name='oo') :: pp integer, bind(C,name='') :: qq end module mod ! { dg-final { scan-assembler "__mod_MOD_aa" } } ! { dg-final { scan-assembler-not "iii" } } ! { dg-final { scan-assembler "jj" } } ! { dg-final { scan-assembler "lll" } } ! { dg-final { scan-assembler-not "kk" } } ! { dg-final { scan-assembler-not "mmmm" } } ! { dg-final { scan-assembler "nnn" } } ! { dg-final { scan-assembler "oo" } } ! { dg-final { scan-assembler "__mod_MOD_qq" } } MODULE M PRIVATE :: two, three, four, six PUBLIC :: one, seven, eight, ten CONTAINS SUBROUTINE one(a) integer :: a a = two() END SUBROUTINE one integer FUNCTION two() two = 42 END FUNCTION two integer FUNCTION three() bind(C) ! { dg-warning "PRIVATE but has been given the binding label" } three = 43 END FUNCTION three integer FUNCTION four() bind(C, name='five') ! { dg-warning "PRIVATE but has been given the binding label" } four = 44 END FUNCTION four integer FUNCTION six() bind(C, name='') six = 46 END FUNCTION six integer FUNCTION seven() bind(C) seven = 46 END FUNCTION seven integer FUNCTION eight() bind(C, name='nine') eight = 48 END FUNCTION eight integer FUNCTION ten() bind(C, name='') ten = 48 END FUNCTION ten END MODULE ! { dg-final { scan-assembler "__m_MOD_one" } } ! { dg-final { scan-assembler-not "two" } } ! { dg-final { scan-assembler "three" } } ! { dg-final { scan-assembler-not "four" } } ! { dg-final { scan-assembler "five" } } ! { dg-final { scan-assembler-not "six" } } ! { dg-final { scan-assembler "seven" } } ! { dg-final { scan-assembler "nine" } } ! { dg-final { scan-assembler "__m_MOD_ten" } }