annotate gcc/testsuite/gfortran.dg/argument_checking_13.f90 @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
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 !
kono
parents:
diff changeset
3 ! PR fortran/34796
kono
parents:
diff changeset
4 !
kono
parents:
diff changeset
5 ! Argument checks:
kono
parents:
diff changeset
6 ! - elements of deferred-shape arrays (= non-dummies) are allowed
kono
parents:
diff changeset
7 ! as the memory is contiguous
kono
parents:
diff changeset
8 ! - while assumed-shape arrays (= dummy arguments) and pointers are
kono
parents:
diff changeset
9 ! not (strides can make them non-contiguous)
kono
parents:
diff changeset
10 ! and
kono
parents:
diff changeset
11 ! - if the memory is non-contigous, character arguments have as
kono
parents:
diff changeset
12 ! storage size only the size of the element itself, check for
kono
parents:
diff changeset
13 ! too short actual arguments.
kono
parents:
diff changeset
14 !
kono
parents:
diff changeset
15 subroutine test1(assumed_sh_dummy, pointer_dummy)
kono
parents:
diff changeset
16 implicit none
kono
parents:
diff changeset
17 interface
kono
parents:
diff changeset
18 subroutine rlv1(y)
kono
parents:
diff changeset
19 real :: y(3)
kono
parents:
diff changeset
20 end subroutine rlv1
kono
parents:
diff changeset
21 end interface
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 real :: assumed_sh_dummy(:,:,:)
kono
parents:
diff changeset
24 real, pointer :: pointer_dummy(:,:,:)
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 real, allocatable :: deferred(:,:,:)
kono
parents:
diff changeset
27 real, pointer :: ptr(:,:,:)
kono
parents:
diff changeset
28 call rlv1(deferred(1,1,1)) ! valid since contiguous
kono
parents:
diff changeset
29 call rlv1(ptr(1,1,1)) ! { dg-error "Element of assumed-shaped or pointer array" }
kono
parents:
diff changeset
30 call rlv1(assumed_sh_dummy(1,1,1)) ! { dg-error "Element of assumed-shaped or pointer array" }
kono
parents:
diff changeset
31 call rlv1(pointer_dummy(1,1,1)) ! { dg-error "Element of assumed-shaped or pointer array" }
kono
parents:
diff changeset
32 end
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 subroutine test2(assumed_sh_dummy, pointer_dummy)
kono
parents:
diff changeset
35 implicit none
kono
parents:
diff changeset
36 interface
kono
parents:
diff changeset
37 subroutine rlv2(y)
kono
parents:
diff changeset
38 character :: y(3)
kono
parents:
diff changeset
39 end subroutine rlv2
kono
parents:
diff changeset
40 end interface
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 character(3) :: assumed_sh_dummy(:,:,:)
kono
parents:
diff changeset
43 character(3), pointer :: pointer_dummy(:,:,:)
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 character(3), allocatable :: deferred(:,:,:)
kono
parents:
diff changeset
46 character(3), pointer :: ptr(:,:,:)
kono
parents:
diff changeset
47 call rlv2(deferred(1,1,1)) ! Valid since contiguous
kono
parents:
diff changeset
48 call rlv2(ptr(1,1,1)) ! Valid F2003
kono
parents:
diff changeset
49 call rlv2(assumed_sh_dummy(1,1,1)) ! Valid F2003
kono
parents:
diff changeset
50 call rlv2(pointer_dummy(1,1,1)) ! Valid F2003
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 ! The following is kind of ok: The memory access it valid
kono
parents:
diff changeset
53 ! We warn nonetheless as the result is not what is intented
kono
parents:
diff changeset
54 ! and also formally wrong.
kono
parents:
diff changeset
55 ! Using (1:string_length) would be ok.
kono
parents:
diff changeset
56 call rlv2(ptr(1,1,1)(1:1)) ! { dg-error "contains too few elements" }
kono
parents:
diff changeset
57 call rlv2(assumed_sh_dummy(1,1,1)(1:2)) ! { dg-error "contains too few elements" }
kono
parents:
diff changeset
58 call rlv2(pointer_dummy(1,1,1)(1:3)) ! Valid F2003
kono
parents:
diff changeset
59 end
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 subroutine test3(assumed_sh_dummy, pointer_dummy)
kono
parents:
diff changeset
62 implicit none
kono
parents:
diff changeset
63 interface
kono
parents:
diff changeset
64 subroutine rlv3(y)
kono
parents:
diff changeset
65 character :: y(3)
kono
parents:
diff changeset
66 end subroutine rlv3
kono
parents:
diff changeset
67 end interface
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 character(2) :: assumed_sh_dummy(:,:,:)
kono
parents:
diff changeset
70 character(2), pointer :: pointer_dummy(:,:,:)
kono
parents:
diff changeset
71
kono
parents:
diff changeset
72 character(2), allocatable :: deferred(:,:,:)
kono
parents:
diff changeset
73 character(2), pointer :: ptr(:,:,:)
kono
parents:
diff changeset
74 call rlv3(deferred(1,1,1)) ! Valid since contiguous
kono
parents:
diff changeset
75 call rlv3(ptr(1,1,1)) ! { dg-error "contains too few elements" }
kono
parents:
diff changeset
76 call rlv3(assumed_sh_dummy(1,1,1)) ! { dg-error "contains too few elements" }
kono
parents:
diff changeset
77 call rlv3(pointer_dummy(1,1,1)) ! { dg-error "contains too few elements" }
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 call rlv3(deferred(1,1,1)(1:2)) ! Valid since contiguous
kono
parents:
diff changeset
80 call rlv3(ptr(1,1,1)(1:2)) ! { dg-error "contains too few elements" }
kono
parents:
diff changeset
81 call rlv3(assumed_sh_dummy(1,1,1)(1:2)) ! { dg-error "contains too few elements" }
kono
parents:
diff changeset
82 call rlv3(pointer_dummy(1,1,1)(1:2)) ! { dg-error "contains too few elements" }
kono
parents:
diff changeset
83 end