File: argument_checking_15.f90

package info (click to toggle)
gcc-arm-none-eabi 15%3A14.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,099,328 kB
  • sloc: cpp: 3,627,108; ansic: 2,571,498; ada: 834,230; f90: 235,082; makefile: 79,231; asm: 74,984; xml: 51,692; exp: 39,736; sh: 33,298; objc: 15,629; python: 15,069; fortran: 14,429; pascal: 7,003; awk: 5,070; perl: 3,106; ml: 285; lisp: 253; lex: 204; haskell: 135
file content (57 lines) | stat: -rw-r--r-- 1,625 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
! { dg-do compile }
!
! PR fortran/32616
!
! Check for to few elements of the actual argument
! and reject mismatching string lengths for assumed-shape dummies
!
implicit none
external test
integer :: i(10)
integer :: j(2,2)
character(len=4) :: str(2)
character(len=4) :: str2(2,2)

call test()

call foo(i(8)) ! { dg-error "too few elements for dummy argument 'a' .3/4." }
call foo(j(1,1))
call foo(j(2,1)) ! { dg-error "too few elements for dummy argument 'a' .3/4." }
call foo(j(1,2)) ! { dg-error "too few elements for dummy argument 'a' .2/4." }

str = 'FORT'
str2 = 'fort'
call bar(str(:)(1:2)) ! { dg-error "too few elements for dummy argument 'c' .4/6." }
call bar(str(1:2)(1:1)) ! { dg-error "too few elements for dummy argument 'c' .2/6." }
call bar(str(2)) ! { dg-error "too few elements for dummy argument 'c' .4/6." }
call bar(str(1)(2:1)) ! OK
call bar(str2(2,1)(4:1)) ! OK
call bar(str2(1,2)(3:4)) ! OK
call bar(str2(1,2)(4:4)) ! { dg-error "too few elements for dummy argument 'c' .5/6." }
contains
  subroutine foo(a)
    integer :: a(4)
  end subroutine foo
  subroutine bar(c)
    character(len=2) :: c(3)
!    print '(3a)', ':',c(1),':'
!    print '(3a)', ':',c(2),':'
!    print '(3a)', ':',c(3),':'
  end subroutine bar
end


subroutine test()
implicit none
character(len=5), pointer :: c
character(len=5) :: str(5)
call foo(c) ! { dg-warning "Character length mismatch" }
call bar(str) ! { dg-warning "Character length mismatch" }
contains
  subroutine foo(a)
    character(len=3), pointer :: a
  end subroutine
  subroutine bar(a)
    character(len=3) :: a(:)
  end subroutine bar
end subroutine test