@@ -90,16 +90,37 @@ module m7
9090 integer :: i2
9191 integer , private :: i3
9292 end type
93+ type :: t3
94+ private
95+ integer :: i4 = 0
96+ procedure (real ), pointer , nopass :: pp1 = > null ()
97+ end type
98+ type, extends(t3) :: t4
99+ private
100+ integer :: i5
101+ procedure (real ), pointer , nopass :: pp2
102+ end type
93103end
94104subroutine s7
95105 use m7
96106 type (t2) :: x
107+ type (t4) :: y
97108 integer :: j
98109 j = x% i2
99- ! ERROR: PRIVATE name 'i3' is only accessible within module 'm7'
110+ ! ERROR: PRIVATE name 'i3' is accessible only within module 'm7'
100111 j = x% i3
101- ! ERROR: PRIVATE name 't1' is only accessible within module 'm7'
112+ ! ERROR: PRIVATE name 't1' is accessible only within module 'm7'
102113 j = x% t1% i1
114+ ! ok, parent component is not affected by PRIVATE in t4
115+ y% t3 = t3()
116+ ! ERROR: PRIVATE name 'i4' is accessible only within module 'm7'
117+ y% i4 = 0
118+ ! ERROR: PRIVATE name 'pp1' is accessible only within module 'm7'
119+ y% pp1 = > null ()
120+ ! ERROR: PRIVATE name 'i5' is accessible only within module 'm7'
121+ y% i5 = 0
122+ ! ERROR: PRIVATE name 'pp2' is accessible only within module 'm7'
123+ y% pp2 = > null ()
103124end
104125
105126! 7.5.4.8(2)
@@ -122,11 +143,11 @@ subroutine s1
122143subroutine s8
123144 use m8
124145 type (t) :: x
125- ! ERROR: PRIVATE name 'i2' is only accessible within module 'm8'
146+ ! ERROR: PRIVATE name 'i2' is accessible only within module 'm8'
126147 x = t(2 , 5 )
127- ! ERROR: PRIVATE name 'i2' is only accessible within module 'm8'
148+ ! ERROR: PRIVATE name 'i2' is accessible only within module 'm8'
128149 x = t(i1= 2 , i2= 5 )
129- ! ERROR: PRIVATE name 'i2' is only accessible within module 'm8'
150+ ! ERROR: PRIVATE name 'i2' is accessible only within module 'm8'
130151 a = [y% i2]
131152end
132153
@@ -166,6 +187,6 @@ subroutine s10
166187 use m10
167188 type (t) x
168189 x = t(1 )
169- ! ERROR: PRIVATE name 'operator(+)' is only accessible within module 'm10'
190+ ! ERROR: PRIVATE name 'operator(+)' is accessible only within module 'm10'
170191 x = x + x
171192end subroutine
0 commit comments