blob: 1c0ecd1c1a46a5faf146586781d5526ac178817f [file] [log] [blame]
! { dg-do compile }
! Test for errors when setting private components inside a structure constructor
! or when constructing a private structure.
MODULE privmod
IMPLICIT NONE
TYPE :: haspriv_t
INTEGER :: a
INTEGER, PRIVATE :: b = 42
END TYPE haspriv_t
TYPE :: allpriv_t
PRIVATE
INTEGER :: a = 25
END TYPE allpriv_t
TYPE, PRIVATE :: ispriv_t
INTEGER :: x
END TYPE ispriv_t
CONTAINS
SUBROUTINE testfunc ()
IMPLICIT NONE
TYPE(haspriv_t) :: struct1
TYPE(allpriv_t) :: struct2
TYPE(ispriv_t) :: struct3
! This should succeed from within the module, no error.
struct1 = haspriv_t (1, 2)
struct2 = allpriv_t (42)
struct3 = ispriv_t (42)
END SUBROUTINE testfunc
END MODULE privmod
PROGRAM test
USE privmod
IMPLICIT NONE
TYPE(haspriv_t) :: struct1
TYPE(allpriv_t) :: struct2
! This should succeed, not giving value to private component
struct1 = haspriv_t (5)
struct2 = allpriv_t ()
! These should fail
struct1 = haspriv_t (1, 2) ! { dg-error "is a PRIVATE component" }
struct1 = haspriv_t (b = 2, a = 1) ! { dg-error "is a PRIVATE component" }
! This should fail as all components are private
struct2 = allpriv_t (5) ! { dg-error "is a PRIVATE component" }
! This should fail as the type itself is private, and the expression should
! be deduced as call to an undefined function.
WRITE (*,*) ispriv_t (5) ! { dg-error "has no IMPLICIT type" }
END PROGRAM test