2 ! { dg-options "-std=f95" }
6 ! This checks for Fortran 2003 extensions.
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)
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
)
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" }
46 subroutine test3(assumed_sh_dummy
, pointer_dummy
)
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" }