| ! { dg-do compile } |
| ! |
| ! PR fortran/51378 |
| ! |
| ! Allow constructor to nonprivate parent compoents, |
| ! even if the extension specified PRIVATE for its own components |
| ! |
| ! Contributed by Reinhold Bader |
| ! |
| module type_ext |
| type :: vec |
| real, dimension(3) :: comp |
| integer :: len |
| end type vec |
| type, extends(vec) :: l_vec |
| private |
| character(len=20) :: label = '01234567890123456789' |
| end type l_vec |
| end module type_ext |
| program test_ext |
| use type_ext |
| implicit none |
| type(vec) :: o_vec, oo_vec |
| type(l_vec) :: o_l_vec |
| integer :: i |
| ! |
| o_vec = vec((/1.0, 2.0, 3.0/),3) |
| ! write(*,*) o_vec%comp, o_vec%len |
| o_l_vec = l_vec(comp=(/1.0, 2.0, 3.0/),len=3) |
| ! partial constr. not accepted by ifort 11.1, fixed in 12.0 (issue 562240) |
| ! write(*,*) o_l_vec%comp, o_l_vec%len |
| ! write(*,*) o_l_vec%vec |
| oo_vec = o_l_vec%vec |
| do i=1, 3 |
| if (abs(oo_vec%comp(i) - o_vec%comp(i)) > 1.0E-5) then |
| write(*, *) 'FAIL' |
| stop |
| end if |
| end do |
| write(*, *) 'OK' |
| end program |