summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/protected_8.f90
blob: aaa34a68f9bf1d9fbf522ab9e33ac916c4b7f988 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
! { dg-do compile }
!
! PR fortran/46122
!
! PROTECT check
!
! Contributed by Jared Ahern
!

MODULE amod
   IMPLICIT NONE
   TYPE foo
      INTEGER :: i = 4
      INTEGER, POINTER :: j => NULL()
   END TYPE foo
   TYPE(foo), SAVE, PROTECTED :: a
   TYPE(foo), SAVE, PROTECTED, POINTER :: b
   INTEGER, SAVE, PROTECTED :: i = 5
   INTEGER, SAVE, PROTECTED, POINTER :: j => NULL()
contains
  subroutine alloc()
    allocate(b,j)
  end subroutine alloc
END MODULE amod

PROGRAM test
   USE amod
   IMPLICIT NONE
   INTEGER, TARGET :: k
   TYPE(foo), TARGET :: c
   k = 2   ! local
   c%i = 9 ! local

   call alloc()

   i = k    ! { dg-error "is PROTECTED" }
   j => k   ! { dg-error "is PROTECTED" }
   j = 3    ! OK 1
   a = c    ! { dg-error "is PROTECTED" }
   a%i = k  ! { dg-error "is PROTECTED" }
   a%j => k ! { dg-error "is PROTECTED" }
   a%j = 5  ! OK 2
   b => c   ! { dg-error "is PROTECTED" }
   b%i = k  ! OK 3
   b%j => k ! OK 4
   b%j = 5  ! OK 5

END PROGRAM test

! { dg-final { cleanup-modules "amod" } }