62 lines
1.5 KiB
Fortran
62 lines
1.5 KiB
Fortran
! { 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
|
|
! { dg-final { cleanup-modules "privmod" } }
|