annotate gcc/testsuite/gfortran.dg/coarray_lock_3.f90 @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ! { dg-do compile }
kono
parents:
diff changeset
2 ! { dg-options "-fcoarray=single" }
kono
parents:
diff changeset
3 !
kono
parents:
diff changeset
4 !
kono
parents:
diff changeset
5 ! LOCK/LOCK_TYPE checks
kono
parents:
diff changeset
6 !
kono
parents:
diff changeset
7 subroutine extends()
kono
parents:
diff changeset
8 use iso_fortran_env
kono
parents:
diff changeset
9 type t
kono
parents:
diff changeset
10 end type t
kono
parents:
diff changeset
11 type, extends(t) :: t2 ! { dg-error "coarray component, parent type .t. shall also have one" }
kono
parents:
diff changeset
12 type(lock_type), allocatable :: c(:)[:]
kono
parents:
diff changeset
13 end type t2
kono
parents:
diff changeset
14 end subroutine extends
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 module m
kono
parents:
diff changeset
17 use iso_fortran_env
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 type t
kono
parents:
diff changeset
20 type(lock_type), allocatable :: x(:)[:]
kono
parents:
diff changeset
21 end type t
kono
parents:
diff changeset
22 end module m
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 module m2
kono
parents:
diff changeset
25 use iso_fortran_env
kono
parents:
diff changeset
26 type t2
kono
parents:
diff changeset
27 type(lock_type), allocatable :: x ! { dg-error "Allocatable component x at .1. of type LOCK_TYPE must have a codimension" }
kono
parents:
diff changeset
28 end type t2
kono
parents:
diff changeset
29 end module m2
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 module m3
kono
parents:
diff changeset
32 use iso_fortran_env
kono
parents:
diff changeset
33 type t3
kono
parents:
diff changeset
34 type(lock_type) :: x ! OK
kono
parents:
diff changeset
35 end type t3
kono
parents:
diff changeset
36 end module m3
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 subroutine sub(x)
kono
parents:
diff changeset
39 use iso_fortran_env
kono
parents:
diff changeset
40 type(lock_type), intent(out) :: x[*] ! OK
kono
parents:
diff changeset
41 end subroutine sub
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 subroutine sub1(x) ! { dg-error "is INTENT.OUT. and can thus not be an allocatable coarray or have coarray components" }
kono
parents:
diff changeset
44 use iso_fortran_env
kono
parents:
diff changeset
45 type(lock_type), allocatable, intent(out) :: x(:)[:]
kono
parents:
diff changeset
46 end subroutine sub1
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48 subroutine sub2(x) ! { dg-error "is INTENT.OUT. and can thus not be an allocatable coarray or have coarray components" }
kono
parents:
diff changeset
49 use m
kono
parents:
diff changeset
50 type(t), intent(out) :: x
kono
parents:
diff changeset
51 end subroutine sub2
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 subroutine sub3(x) ! { dg-error "with coarray component shall be a nonpointer, nonallocatable scalar" }
kono
parents:
diff changeset
54 use m
kono
parents:
diff changeset
55 type(t), intent(inout) :: x[*]
kono
parents:
diff changeset
56 end subroutine sub3
kono
parents:
diff changeset
57
kono
parents:
diff changeset
58 subroutine sub4(x)
kono
parents:
diff changeset
59 use m3
kono
parents:
diff changeset
60 type(t3), intent(inout) :: x[*] ! OK
kono
parents:
diff changeset
61 end subroutine sub4
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 subroutine lock_test
kono
parents:
diff changeset
64 use iso_fortran_env
kono
parents:
diff changeset
65 type t
kono
parents:
diff changeset
66 end type t
kono
parents:
diff changeset
67 type(lock_type) :: lock ! { dg-error "of type LOCK_TYPE or with subcomponent of type LOCK_TYPE must be a coarray" }
kono
parents:
diff changeset
68 end subroutine lock_test
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 subroutine lock_test2
kono
parents:
diff changeset
71 use iso_fortran_env
kono
parents:
diff changeset
72 implicit none
kono
parents:
diff changeset
73 type t
kono
parents:
diff changeset
74 end type t
kono
parents:
diff changeset
75 type(t) :: x
kono
parents:
diff changeset
76 type(lock_type), save :: lock[*],lock2(2)[*]
kono
parents:
diff changeset
77 lock(t) ! { dg-error "Syntax error in LOCK statement" }
kono
parents:
diff changeset
78 lock(x) ! { dg-error "must be a scalar of type LOCK_TYPE" }
kono
parents:
diff changeset
79 lock(lock)
kono
parents:
diff changeset
80 lock(lock2(1))
kono
parents:
diff changeset
81 lock(lock2) ! { dg-error "must be a scalar of type LOCK_TYPE" }
kono
parents:
diff changeset
82 lock(lock[1]) ! OK
kono
parents:
diff changeset
83 end subroutine lock_test2
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 subroutine lock_test3
kono
parents:
diff changeset
87 use iso_fortran_env
kono
parents:
diff changeset
88 type(lock_type), save :: a[*], b[*]
kono
parents:
diff changeset
89 a = b ! { dg-error "LOCK_TYPE in variable definition context" }
kono
parents:
diff changeset
90 b = lock_type() ! { dg-error "LOCK_TYPE in variable definition context" }
kono
parents:
diff changeset
91 print *, a ! { dg-error "cannot have PRIVATE components" }
kono
parents:
diff changeset
92 end subroutine lock_test3
kono
parents:
diff changeset
93
kono
parents:
diff changeset
94
kono
parents:
diff changeset
95 subroutine lock_test4
kono
parents:
diff changeset
96 use iso_fortran_env
kono
parents:
diff changeset
97 type(lock_type), allocatable :: A(:)[:]
kono
parents:
diff changeset
98 logical :: ob
kono
parents:
diff changeset
99 allocate(A(1)[*])
kono
parents:
diff changeset
100 lock(A(1), acquired_lock=ob)
kono
parents:
diff changeset
101 unlock(A(1))
kono
parents:
diff changeset
102 deallocate(A)
kono
parents:
diff changeset
103 end subroutine lock_test4
kono
parents:
diff changeset
104
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 subroutine argument_check()
kono
parents:
diff changeset
107 use iso_fortran_env
kono
parents:
diff changeset
108 type(lock_type), SAVE :: ll[*]
kono
parents:
diff changeset
109 call no_interface(ll) ! { dg-error "Actual argument of LOCK_TYPE or with LOCK_TYPE component at .1. requires an explicit interface" }
kono
parents:
diff changeset
110 call test(ll) ! { dg-error "non-INTENT.INOUT. dummy .x. at .1., which is LOCK_TYPE or has a LOCK_TYPE component" }
kono
parents:
diff changeset
111 contains
kono
parents:
diff changeset
112 subroutine test(x)
kono
parents:
diff changeset
113 type(lock_type), intent(in) :: x[*]
kono
parents:
diff changeset
114 end subroutine test
kono
parents:
diff changeset
115 end subroutine argument_check