1! { dg-do compile } 2! { dg-options "-O2" } 3! 4! PR fortran/52751 (top, "module mod") 5! PR fortran/40973 (bottom, "module m" 6! 7! Ensure that (only) those module variables and procedures which are PRIVATE 8! and have no C-binding label are optimized away. 9! 10 module mod 11 integer :: aa 12 integer, private :: iii 13 integer, private, bind(C) :: jj ! { dg-warning "PRIVATE but has been given the binding label" } 14 integer, private, bind(C,name='lll') :: kk ! { dg-warning "PRIVATE but has been given the binding label" } 15 integer, private, bind(C,name='') :: mmmm 16 integer, bind(C) :: nnn 17 integer, bind(C,name='oo') :: pp 18 integer, bind(C,name='') :: qq 19 end module mod 20 21 ! { dg-final { scan-assembler "__mod_MOD_aa" } } 22 ! { dg-final { scan-assembler-not "iii" } } 23 ! { dg-final { scan-assembler "jj" } } 24 ! { dg-final { scan-assembler "lll" } } 25 ! { dg-final { scan-assembler-not "kk" } } 26 ! { dg-final { scan-assembler-not "mmmm" } } 27 ! { dg-final { scan-assembler "nnn" } } 28 ! { dg-final { scan-assembler "oo" } } 29 ! { dg-final { scan-assembler "__mod_MOD_qq" } } 30 31MODULE M 32 PRIVATE :: two, three, four, six 33 PUBLIC :: one, seven, eight, ten 34CONTAINS 35 SUBROUTINE one(a) 36 integer :: a 37 a = two() 38 END SUBROUTINE one 39 integer FUNCTION two() 40 two = 42 41 END FUNCTION two 42 integer FUNCTION three() bind(C) ! { dg-warning "PRIVATE but has been given the binding label" } 43 three = 43 44 END FUNCTION three 45 integer FUNCTION four() bind(C, name='five') ! { dg-warning "PRIVATE but has been given the binding label" } 46 four = 44 47 END FUNCTION four 48 integer FUNCTION six() bind(C, name='') 49 six = 46 50 END FUNCTION six 51 integer FUNCTION seven() bind(C) 52 seven = 46 53 END FUNCTION seven 54 integer FUNCTION eight() bind(C, name='nine') 55 eight = 48 56 END FUNCTION eight 57 integer FUNCTION ten() bind(C, name='') 58 ten = 48 59 END FUNCTION ten 60END MODULE 61 62! { dg-final { scan-assembler "__m_MOD_one" } } 63! { dg-final { scan-assembler-not "two" } } 64! { dg-final { scan-assembler "three" } } 65! { dg-final { scan-assembler-not "four" } } 66! { dg-final { scan-assembler "five" } } 67! { dg-final { scan-assembler-not "six" } } 68! { dg-final { scan-assembler "seven" } } 69! { dg-final { scan-assembler "nine" } } 70! { dg-final { scan-assembler "__m_MOD_ten" } } 71