Reset branch to trunk.
[official-gcc.git] / trunk / gcc / testsuite / gfortran.dg / argument_checking_14.f90
blob4c32b253a5e13ca2a60ce0f679289ec8b96f9ef0
1 ! { dg-do compile }
2 ! { dg-options "-std=f95" }
4 ! PR fortran/34796
6 ! This checks for Fortran 2003 extensions.
8 ! Argument checks:
9 ! - elements of deferred-shape arrays (= non-dummies) are allowed
10 ! as the memory is contiguous
11 ! - while assumed-shape arrays (= dummy arguments) and pointers are
12 ! not (strides can make them non-contiguous)
13 ! and
14 ! - if the memory is non-contigous, character arguments have as
15 ! storage size only the size of the element itself, check for
16 ! too short actual arguments.
18 subroutine test2(assumed_sh_dummy, pointer_dummy)
19 implicit none
20 interface
21 subroutine rlv2(y)
22 character :: y(3)
23 end subroutine rlv2
24 end interface
26 character(3) :: assumed_sh_dummy(:,:,:)
27 character(3), pointer :: pointer_dummy(:,:,:)
29 character(3), allocatable :: deferred(:,:,:)
30 character(3), pointer :: ptr(:,:,:)
31 call rlv2(deferred(1,1,1)) ! Valid since contiguous
32 call rlv2(ptr(1,1,1)) ! { dg-error "Fortran 2003: Scalar CHARACTER actual" }
33 call rlv2(assumed_sh_dummy(1,1,1)) ! { dg-error "Fortran 2003: Scalar CHARACTER actual" }
34 call rlv2(pointer_dummy(1,1,1)) ! { dg-error "Fortran 2003: Scalar CHARACTER actual" }
36 ! The following is kind of ok: The memory access it valid
37 ! We warn nonetheless as the result is not what is intented
38 ! and also formally wrong.
39 ! Using (1:string_length) would be ok.
40 call rlv2(deferred(1,1,1)(1:3)) ! OK
41 call rlv2(ptr(1,1,1)(1:1)) ! { dg-error "Fortran 2003: Scalar CHARACTER actual" }
42 call rlv2(assumed_sh_dummy(1,1,1)(1:2)) ! { dg-error "Fortran 2003: Scalar CHARACTER actual" }
43 call rlv2(pointer_dummy(1,1,1)(1:3)) ! { dg-error "Fortran 2003: Scalar CHARACTER actual" }
44 end
46 subroutine test3(assumed_sh_dummy, pointer_dummy)
47 implicit none
48 interface
49 subroutine rlv3(y)
50 character :: y(2)
51 end subroutine rlv3
52 end interface
54 character(2) :: assumed_sh_dummy(:,:,:)
55 character(2), pointer :: pointer_dummy(:,:,:)
57 character(2), allocatable :: deferred(:,:,:)
58 character(2), pointer :: ptr(:,:,:)
59 call rlv3(deferred(1,1,1)) ! Valid since contiguous
60 call rlv3(ptr(1,1,1)) ! { dg-error "Fortran 2003: Scalar CHARACTER actual" }
61 call rlv3(assumed_sh_dummy(1,1,1)) ! { dg-error "Fortran 2003: Scalar CHARACTER actual" }
62 call rlv3(pointer_dummy(1,1,1)) ! { dg-error "Fortran 2003: Scalar CHARACTER actual" }
64 call rlv3(deferred(1,1,1)(1:2)) ! Valid since contiguous
65 call rlv3(ptr(1,1,1)(1:2)) ! { dg-error "Fortran 2003: Scalar CHARACTER actual" }
66 call rlv3(assumed_sh_dummy(1,1,1)(1:2)) ! { dg-error "Fortran 2003: Scalar CHARACTER actual" }
67 call rlv3(pointer_dummy(1,1,1)(1:2)) ! { dg-error "Fortran 2003: Scalar CHARACTER actual" }
68 end