--- /dev/null
+! { dg-do compile }
+! { dg-additional-options "-Wconversion-extra" }
+!
+! Test fix for PR fortran/96724
+!
+! Contributed by José Rui Faustino de Sousa
+
+program repeat_p
+ use, intrinsic :: iso_fortran_env, only: int8, int16, int32, int64
+ implicit none
+
+ integer, parameter :: n = 20
+ integer, parameter :: ucs4 = selected_char_kind ('ISO_10646')
+
+ integer(kind=int8), parameter :: p08 = int(n, kind=int8)
+ integer(kind=int16), parameter :: p16 = int(n, kind=int16)
+ integer(kind=int16), parameter :: p32 = int(n, kind=int32)
+ integer(kind=int16), parameter :: p64 = int(n, kind=int64)
+
+ integer(kind=int8) :: i08
+ integer(kind=int16) :: i16
+ integer(kind=int32) :: i32
+ integer(kind=int64) :: i64
+
+ character(len=n,kind=1) :: c
+ character(len=n,kind=ucs4) :: d
+
+ i08 = p08
+ c = repeat('X', 20_int8)
+ c = repeat('X', i08)
+ c = repeat('X', p08)
+ c = repeat('X', len08(c))
+ d = repeat(ucs4_'X', 20_int8)
+ d = repeat(ucs4_'X', i08)
+ d = repeat(ucs4_'X', p08)
+ d = repeat(ucs4_'X', len08(c))
+ i16 = p16
+ c = repeat('X', 20_int16)
+ c = repeat('X', i16)
+ c = repeat('X', p16)
+ c = repeat('X', len16(c))
+ d = repeat(ucs4_'X', 20_int16)
+ d = repeat(ucs4_'X', i16)
+ d = repeat(ucs4_'X', p16)
+ d = repeat(ucs4_'X', len16(c))
+ i32 = p32
+ c = repeat('X', 20_int32)
+ c = repeat('X', i32)
+ c = repeat('X', p32)
+ c = repeat('X', len32(c))
+ d = repeat(ucs4_'X', 20_int32)
+ d = repeat(ucs4_'X', i32)
+ d = repeat(ucs4_'X', p32)
+ d = repeat(ucs4_'X', len32(c))
+ i64 = p64
+ c = repeat('X', 20_int64)
+ c = repeat('X', i64)
+ c = repeat('X', p64)
+ c = repeat('X', len64(c))
+ d = repeat(ucs4_'X', 20_int64)
+ d = repeat(ucs4_'X', i64)
+ d = repeat(ucs4_'X', p64)
+ d = repeat(ucs4_'X', len64(c))
+
+contains
+
+ function len08(x) result(l)
+ character(len=*), intent(in) :: x
+ integer(kind=int8) :: l
+
+ l = int(len(x), kind=int8)
+ end function len08
+
+ function len16(x) result(l)
+ character(len=*), intent(in) :: x
+ integer(kind=int16) :: l
+
+ l = int(len(x), kind=int16)
+ end function len16
+
+ function len32(x) result(l)
+ character(len=*), intent(in) :: x
+ integer(kind=int32) :: l
+
+ l = int(len(x), kind=int32)
+ end function len32
+
+ function len64(x) result(l)
+ character(len=*), intent(in) :: x
+ integer(kind=int64) :: l
+
+ l = int(len(x), kind=int64)
+ end function len64
+
+ function ulen08(x) result(l)
+ character(len=*,kind=ucs4), intent(in) :: x
+ integer(kind=int8) :: l
+
+ l = int(len(x), kind=int8)
+ end function ulen08
+
+ function ulen16(x) result(l)
+ character(len=*,kind=ucs4), intent(in) :: x
+ integer(kind=int16) :: l
+
+ l = int(len(x), kind=int16)
+ end function ulen16
+
+ function ulen32(x) result(l)
+ character(len=*,kind=ucs4), intent(in) :: x
+ integer(kind=int32) :: l
+
+ l = int(len(x), kind=int32)
+ end function ulen32
+
+ function ulen64(x) result(l)
+ character(len=*,kind=ucs4), intent(in) :: x
+ integer(kind=int64) :: l
+
+ l = int(len(x), kind=int64)
+ end function ulen64
+
+end program repeat_p