1! { dg-do compile }
2!
3! PR fortran/32876 - accepts private items in public NAMELISTs
4!
5! USE-associated types with private components may
6! not be used in namelists -- anywhere.
7!
8MODULE types
9  type :: tp4
10    PRIVATE
11    real :: x
12    integer :: i
13  end type
14
15  ! nested type
16  type :: tp3
17    real :: x
18    integer, private :: i
19  end type
20
21  type :: tp2
22    type(tp3) :: t
23  end type
24
25  type :: tp1
26    integer :: i
27    type(tp2) :: t
28  end type
29END MODULE
30
31MODULE nml
32  USE types
33
34  type(tp1) :: t1
35  type(tp4) :: t4
36
37  namelist /a/ t1          ! { dg-error "use-associated PRIVATE components" }
38  namelist /b/ t4          ! { dg-error "use-associated PRIVATE components" }
39
40  integer, private :: i
41  namelist /c/ i           ! { dg-error "was declared PRIVATE and cannot be member of PUBLIC namelist" }
42
43contains
44  subroutine y()
45   type(tp2) :: y2
46   type(tp3) :: y3
47
48    namelist /nml2/ y2     ! { dg-error "has use-associated PRIVATE components " }
49    namelist /nml3/ y3     ! { dg-error "has use-associated PRIVATE components " }
50  end subroutine
51END MODULE
52
53
54program xxx
55  use types
56
57  type :: tp5
58    TYPE(tp4) :: t        ! nested private components
59  end type
60  type(tp5) :: t5
61
62  namelist /nml/ t5       ! { dg-error "has use-associated PRIVATE components" }
63
64contains
65  subroutine z()
66    namelist /nml2/ t5    ! { dg-error "has use-associated PRIVATE components" }
67  end subroutine
68end program
69