164 lines
7.1 KiB
Fortran
164 lines
7.1 KiB
Fortran
|
! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic
|
||
|
! Detect incompatible argument shapes
|
||
|
module m
|
||
|
integer :: ha = 1
|
||
|
contains
|
||
|
subroutine s1(a)
|
||
|
real, intent(in) :: a(2,3)
|
||
|
end
|
||
|
subroutine s2(a)
|
||
|
real, intent(in) :: a(3,2)
|
||
|
end
|
||
|
subroutine s3(a)
|
||
|
real, intent(in) :: a(3,*)
|
||
|
end
|
||
|
subroutine s4(a)
|
||
|
real, intent(in) :: a(:,:)
|
||
|
end
|
||
|
subroutine s5(a)
|
||
|
real, intent(in) :: a(..)
|
||
|
end
|
||
|
subroutine s6(a,n,m)
|
||
|
integer, intent(in) :: n, m
|
||
|
real, intent(in) :: a(n, m)
|
||
|
end
|
||
|
subroutine s6b(a,nn,mm)
|
||
|
integer, intent(in) :: nn, mm
|
||
|
real, intent(in) :: a(nn, mm)
|
||
|
end
|
||
|
subroutine s7(a,n,m)
|
||
|
integer, intent(in) :: n, m
|
||
|
real, intent(in) :: a(m, n)
|
||
|
end
|
||
|
subroutine s8(a,n,m)
|
||
|
integer, intent(in) :: n, m
|
||
|
real, intent(in) :: a(n+1,m+1)
|
||
|
end
|
||
|
subroutine s8b(a,n,m)
|
||
|
integer, intent(in) :: n, m
|
||
|
real, intent(in) :: a(n-1,m+2)
|
||
|
end
|
||
|
subroutine s9(a)
|
||
|
real, intent(in) :: a(ha,ha)
|
||
|
end
|
||
|
subroutine s9b(a)
|
||
|
real, intent(in) :: a(ha,ha)
|
||
|
end
|
||
|
subroutine s1c(s)
|
||
|
procedure(s1) :: s
|
||
|
end
|
||
|
subroutine s2c(s)
|
||
|
procedure(s2) :: s
|
||
|
end
|
||
|
subroutine s3c(s)
|
||
|
procedure(s3) :: s
|
||
|
end
|
||
|
subroutine s4c(s)
|
||
|
procedure(s4) :: s
|
||
|
end
|
||
|
subroutine s5c(s)
|
||
|
procedure(s5) :: s
|
||
|
end
|
||
|
subroutine s6c(s)
|
||
|
procedure(s6) :: s
|
||
|
end
|
||
|
subroutine s7c(s)
|
||
|
procedure(s7) :: s
|
||
|
end
|
||
|
subroutine s8c(s)
|
||
|
procedure(s8) :: s
|
||
|
end
|
||
|
subroutine s9c(s)
|
||
|
procedure(s9) :: s
|
||
|
end
|
||
|
end
|
||
|
|
||
|
program main
|
||
|
use m
|
||
|
procedure(s1), pointer :: ps1
|
||
|
procedure(s2), pointer :: ps2
|
||
|
procedure(s3), pointer :: ps3
|
||
|
procedure(s4), pointer :: ps4
|
||
|
procedure(s5), pointer :: ps5
|
||
|
procedure(s6), pointer :: ps6
|
||
|
procedure(s7), pointer :: ps7
|
||
|
procedure(s8), pointer :: ps8
|
||
|
procedure(s9), pointer :: ps9
|
||
|
call s1c(s1)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s1c(s2)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s1c(s3)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s1c(s4)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s1c(s5)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': distinct numbers of dummy arguments
|
||
|
call s1c(s6)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s2c(s1)
|
||
|
call s2c(s2)
|
||
|
call s6c(s6)
|
||
|
call s6c(s6b)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s6c(s7)
|
||
|
!WARNING: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s6c(s8)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s7c(s6)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s7c(s8)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s8c(s6)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s8c(s7)
|
||
|
call s8c(s8)
|
||
|
!WARNING: Actual procedure argument has possible interface incompatibility with dummy argument 's=': possibly incompatible dummy argument #1: distinct dummy data object shapes
|
||
|
call s8c(s8b)
|
||
|
call s9c(s9)
|
||
|
call s9c(s9b)
|
||
|
ps1 => s1
|
||
|
!ERROR: Procedure pointer 'ps1' associated with incompatible procedure designator 's2': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
ps1 => s2
|
||
|
!ERROR: Procedure pointer 'ps1' associated with incompatible procedure designator 's3': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
ps1 => s3
|
||
|
!ERROR: Procedure pointer 'ps1' associated with incompatible procedure designator 's4': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
ps1 => s4
|
||
|
!ERROR: Procedure pointer 'ps1' associated with incompatible procedure designator 's5': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
ps1 => s5
|
||
|
!ERROR: Procedure pointer 'ps1' associated with incompatible procedure designator 's6': distinct numbers of dummy arguments
|
||
|
ps1 => s6
|
||
|
!ERROR: Procedure pointer 'ps2' associated with incompatible procedure designator 's1': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
ps2 => s1
|
||
|
ps2 => s2
|
||
|
call s1c(ps1)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s1c(ps2)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s1c(ps3)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s1c(ps4)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s1c(ps5)
|
||
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
call s2c(ps1)
|
||
|
call s2c(ps2)
|
||
|
ps6 => s6
|
||
|
ps6 => s6b
|
||
|
!ERROR: Procedure pointer 'ps6' associated with incompatible procedure designator 's7': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
ps6 => s7
|
||
|
!ERROR: Procedure pointer 'ps6' associated with incompatible procedure designator 's8': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
ps6 => s8
|
||
|
!ERROR: Procedure pointer 'ps7' associated with incompatible procedure designator 's6': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
ps7 => s6
|
||
|
!ERROR: Procedure pointer 'ps7' associated with incompatible procedure designator 's8': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
ps7 => s8
|
||
|
ps8 => s8
|
||
|
!WARNING: pointer 'ps8' and s8b may not be completely compatible procedures: possibly incompatible dummy argument #1: distinct dummy data object shapes
|
||
|
ps8 => s8b
|
||
|
!ERROR: Procedure pointer 'ps8' associated with incompatible procedure designator 's6': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
ps8 => s6
|
||
|
!WARNING: Procedure pointer 'ps8' associated with incompatible procedure designator 's7': incompatible dummy argument #1: incompatible dummy data object shapes
|
||
|
ps8 => s7
|
||
|
end
|