OSDN Git Service

b6d8b4952d24e53e39a27d1d96e2b2d2ef0d7010
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gfortran.dg / coarray_6.f90
1 ! { dg-do compile }
2 !
3 ! Coarray support -- corank declarations
4 ! PR fortran/18918
5 !
6 module m2
7   use iso_c_binding
8   integer(c_int), bind(C) :: a[*] ! { dg-error "BIND.C. attribute conflicts with CODIMENSION" }
9
10   type, bind(C) :: t ! { dg-error "cannot have the ALLOCATABLE" }
11     integer(c_int), allocatable :: a[:] ! { dg-error "cannot have the ALLOCATABLE" }
12     integer(c_int)  :: b[*] ! { dg-error "must be allocatable" }
13   end type t
14 end module m2
15
16 subroutine bind(a) bind(C) ! { dg-error "Coarray dummy variable" }
17   use iso_c_binding
18   integer(c_int) :: a[*]
19 end subroutine bind
20
21 subroutine allo(x) ! { dg-error "can thus not be an allocatable coarray" }
22   integer, allocatable, intent(out) :: x[:]
23 end subroutine allo
24
25 module m
26   integer :: modvar[*] ! OK, implicit save
27   type t
28     complex, allocatable :: b(:,:,:,:)[:,:,:]
29   end type t
30 end module m
31
32 subroutine bar()
33   integer, parameter :: a[*] = 4 ! { dg-error "PARAMETER attribute conflicts with CODIMENSION" }
34   integer, pointer :: b[:] ! { dg-error "is not ALLOCATABLE, SAVE nor a dummy" }
35 end subroutine bar
36
37 subroutine vol()
38   integer,save :: a[*]
39   block
40     volatile :: a ! { dg-error "Specifying VOLATILE for coarray" }
41   end block
42 contains
43   subroutine int()
44     volatile :: a ! { dg-error "Specifying VOLATILE for coarray" }
45   end subroutine int
46 end subroutine vol
47
48
49 function func() result(func2) ! { dg-error "shall not be a coarray or have a coarray component" }
50   use m
51   type(t) :: func2
52 end function func
53
54 subroutine invalid()
55   type t
56     integer, allocatable :: a[:]
57   end type t
58   type t2
59     type(t), allocatable :: b ! { dg-error "nonpointer, nonallocatable scalar" }
60   end type t2
61   type t3
62     type(t), pointer :: c ! { dg-error "nonpointer, nonallocatable scalar" }
63   end type t3
64   type t4
65     type(t) :: d(4) ! { dg-error "nonpointer, nonallocatable scalar" }
66   end type t4
67 end subroutine invalid
68
69 subroutine valid(a)
70   integer :: a(:)[4,-1:6,4:*]
71   type t
72     integer, allocatable :: a[:]
73   end type t
74   type t2
75     type(t) :: b
76   end type t2
77   type(t2), save :: xt2[*]
78 end subroutine valid
79
80 program main
81   integer :: A[*] ! Valid, implicit SAVE attribute
82 end program main
83
84 ! { dg-final { cleanup-modules "m" } }