| ! 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 |