blob: 7eb685615f46ba631b7d2820541383422e29446d [file] [log] [blame]
! { dg-do compile }
!
! PR 49638: [OOP] length parameter is ignored when overriding type bound character functions with constant length.
!
! Original test case contributed by Hans-Werner Boschmann <boschmann@tp1.physik.uni-siegen.de>
module m
implicit none
type :: t1
contains
procedure, nopass :: a => a1
procedure, nopass :: b => b1
procedure, nopass :: c => c1
procedure, nopass :: d => d1
procedure, nopass :: e => e1
end type
type, extends(t1) :: t2
contains
procedure, nopass :: a => a2 ! { dg-error "Character length mismatch in function result" }
procedure, nopass :: b => b2 ! { dg-error "Rank mismatch in function result" }
procedure, nopass :: c => c2 ! FIXME: dg-warning "Possible character length mismatch"
procedure, nopass :: d => d2 ! valid, check for commutativity (+,*)
procedure, nopass :: e => e2 ! { dg-error "Character length mismatch in function result" }
end type
contains
function a1 ()
character(len=6) :: a1
end function
function a2 ()
character(len=7) :: a2
end function
function b1 ()
integer :: b1
end function
function b2 ()
integer, dimension(2) :: b2
end function
function c1 (x)
integer, intent(in) :: x
character(2*x) :: c1
end function
function c2 (x)
integer, intent(in) :: x
character(3*x) :: c2
end function
function d1 (y)
integer, intent(in) :: y
character(2*y+1) :: d1
end function
function d2 (y)
integer, intent(in) :: y
character(1+y*2) :: d2
end function
function e1 (z)
integer, intent(in) :: z
character(3) :: e1
end function
function e2 (z)
integer, intent(in) :: z
character(z) :: e2
end function
end module m
module w1
implicit none
integer :: n = 1
type :: tt1
contains
procedure, nopass :: aa => aa1
end type
contains
function aa1 (m)
integer, intent(in) :: m
character(n+m) :: aa1
end function
end module w1
module w2
use w1, only : tt1
implicit none
integer :: n = 2
type, extends(tt1) :: tt2
contains
procedure, nopass :: aa => aa2 ! FIXME: dg-warning "Possible character length mismatch"
end type
contains
function aa2 (m)
integer, intent(in) :: m
character(n+m) :: aa2
end function
end module w2