2015-07-03 Christophe Lyon <christophe.lyon@linaro.org>
[official-gcc.git] / gcc / testsuite / gfortran.dg / public_private_module_2.f90
blobaa6b9fc726896c4eeb909321f8f5ab0f4bb81d58
1 ! { dg-do compile }
2 ! { dg-options "-O2" }
4 ! PR fortran/52751 (top, "module mod")
5 ! PR fortran/40973 (bottom, "module m"
7 ! Ensure that (only) those module variables and procedures which are PRIVATE
8 ! and have no C-binding label are optimized away.
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
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" } }
31 MODULE M
32 PRIVATE :: two, three, four, six
33 PUBLIC :: one, seven, eight, ten
34 CONTAINS
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
60 END MODULE
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" } }