! Fails on x86 targets where sizeof(long double) == 16.
! { dg-do run }
! { dg-additional-sources PR100914.c }
! { dg-require-effective-target fortran_real_c_float128 }
! { dg-additional-options "-Wno-pedantic" }
!
! Test the fix for PR100914
! 

module isof_m

  use, intrinsic :: iso_c_binding, only: &
    c_signed_char, c_int16_t
  
  implicit none

  private
  
  public ::                       &
    CFI_type_Complex,             &
    CFI_type_float_Complex,       &
    CFI_type_double_Complex,      &
    CFI_type_long_double_Complex, &
    CFI_type_float128_Complex
 
  public ::      &
    check_tk_as, &
    check_tk_ar
  
  
  public ::          &
    cfi_encode_type
  
  integer, parameter :: CFI_type_t = c_int16_t
  
  integer(kind=c_int16_t), parameter :: CFI_type_mask = int(z"FF", kind=c_int16_t)
  integer(kind=c_int16_t), parameter :: CFI_type_kind_shift = 8_c_int16_t

  ! Intrinsic types. Their kind number defines their storage size. */
  integer(kind=c_signed_char), parameter :: CFI_type_Complex = 4

  ! C-Fortran Interoperability types.
  integer(kind=cfi_type_t), parameter :: CFI_type_float_Complex = &
    ior(int(CFI_type_Complex, kind=c_int16_t), shiftl(4_c_int16_t, CFI_type_kind_shift))
  integer(kind=cfi_type_t), parameter :: CFI_type_double_Complex = &
    ior(int(CFI_type_Complex, kind=c_int16_t), shiftl(8_c_int16_t, CFI_type_kind_shift))
  integer(kind=cfi_type_t), parameter :: CFI_type_long_double_Complex = &
    ior(int(CFI_type_Complex, kind=c_int16_t), shiftl(10_c_int16_t, CFI_type_kind_shift))
  integer(kind=cfi_type_t), parameter :: CFI_type_float128_Complex = &
    ior(int(CFI_type_Complex, kind=c_int16_t), shiftl(16_c_int16_t, CFI_type_kind_shift))

  interface
    subroutine check_tk_as(a, t, k, e, n) &
      bind(c, name="check_tk")
      use, intrinsic :: iso_c_binding, only: &
        c_int16_t, c_signed_char, c_size_t
      implicit none
      type(*),                       intent(in) :: a(:)
      integer(c_int16_t),     value, intent(in) :: t
      integer(c_signed_char), value, intent(in) :: k
      integer(c_size_t),      value, intent(in) :: e
      integer(c_size_t),      value, intent(in) :: n
    end subroutine check_tk_as
    subroutine check_tk_ar(a, t, k, e, n) &
      bind(c, name="check_tk")
      use, intrinsic :: iso_c_binding, only: &
        c_int16_t, c_signed_char, c_size_t
      implicit none
      type(*),                       intent(in) :: a(..)
      integer(c_int16_t),     value, intent(in) :: t
      integer(c_signed_char), value, intent(in) :: k
      integer(c_size_t),      value, intent(in) :: e
      integer(c_size_t),      value, intent(in) :: n
    end subroutine check_tk_ar
  end interface

contains

  elemental function cfi_encode_type(type, kind) result(itype)
    integer(kind=c_signed_char), intent(in) :: type
    integer(kind=c_signed_char), intent(in) :: kind

    integer(kind=c_int16_t) :: itype, ikind

    itype = int(type, kind=c_int16_t)
    itype = iand(itype, CFI_type_mask)
    ikind = int(kind, kind=c_int16_t)
    ikind = iand(ikind, CFI_type_mask)
    ikind = shiftl(ikind, CFI_type_kind_shift)
    itype = ior(ikind, itype)
    return
  end function cfi_encode_type
  
end module isof_m

module iso_check_m

  use, intrinsic :: iso_c_binding, only: &
    c_signed_char, c_int16_t, c_size_t

  use, intrinsic :: iso_c_binding, only: &
    c_float_complex,                      &
    c_double_complex,                     &
    c_long_double_complex,                &
    c_float128_complex

  use :: isof_m, only:  &
    CFI_type_Complex

  use :: isof_m, only:            &
    CFI_type_float_Complex,       &
    CFI_type_double_Complex,      &
    CFI_type_long_double_Complex, &
    CFI_type_float128_Complex

  use :: isof_m, only: &
    check_tk_as,       &
    check_tk_ar

  use :: isof_m, only: &
    cfi_encode_type
  
  implicit none

  private

  public ::                      &
    check_c_float_complex,       &
    check_c_double_complex,      &
    check_c_long_double_complex, &
    check_c_float128_complex    

  integer                           :: i
  integer(kind=c_size_t), parameter :: b = 8
  integer,                parameter :: n = 11  
  
  complex(kind=c_float_complex), parameter :: ref_c_float_complex(*)  = &
    [(cmplx(i, 2*i, kind=c_float_complex),  i=1,n)]
  complex(kind=c_double_complex), parameter :: ref_c_double_complex(*)  = &
    [(cmplx(i, 2*i, kind=c_double_complex),  i=1,n)]
  complex(kind=c_long_double_complex), parameter :: ref_c_long_double_complex(*)  = &
    [(cmplx(i, 2*i, kind=c_long_double_complex),  i=1,n)]
  complex(kind=c_float128_complex), parameter :: ref_c_float128_complex(*)  = &
    [(cmplx(i, 2*i, kind=c_float128_complex),  i=1,n)]
  
contains

  ! CFI_type_float_complex
  subroutine check_c_float_complex()
    complex(kind=c_float_complex) :: a(n)
    !
    if (c_float_complex/=4) stop 1
    a = ref_c_float_complex
    call f_check_c_float_complex_as(a)
    if(any(abs(a-ref_c_float_complex)>0.0_c_float_complex)) stop 2
    a = ref_c_float_complex
    call c_check_c_float_complex_as(a)
    if(any(abs(a-ref_c_float_complex)>0.0_c_float_complex)) stop 3
    a = ref_c_float_complex
    call f_check_c_float_complex_ar(a)
    if(any(abs(a-ref_c_float_complex)>0.0_c_float_complex)) stop 4
    a = ref_c_float_complex
    call c_check_c_float_complex_ar(a)
    if(any(abs(a-ref_c_float_complex)>0.0_c_float_complex)) stop 5
    return
  end subroutine check_c_float_complex

  subroutine f_check_c_float_complex_as(a)
    complex(kind=c_float_complex), intent(in) :: a(:)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 6
    if(k/=4_c_signed_char) stop 7
    if(int(k, kind=c_size_t)/=(e/2)) stop 8
    if(t/=CFI_type_float_complex) stop 9
    if(any(abs(a-ref_c_float_complex)>0.0_c_float_complex)) stop 10
    call check_tk_as(a, t, k, e, 1_c_size_t)
    if(any(abs(a-ref_c_float_complex)>0.0_c_float_complex)) stop 11
    return
  end subroutine f_check_c_float_complex_as

  subroutine c_check_c_float_complex_as(a) bind(c)
    complex(kind=c_float_complex), intent(in) :: a(:)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 12
    if(k/=4_c_signed_char) stop 13
    if(int(k, kind=c_size_t)/=(e/2)) stop 14
    if(t/=CFI_type_float_complex) stop 15
    if(any(abs(a-ref_c_float_complex)>0.0_c_float_complex)) stop 16
    call check_tk_as(a, t, k, e, 1_c_size_t)
    if(any(abs(a-ref_c_float_complex)>0.0_c_float_complex)) stop 17
    return
  end subroutine c_check_c_float_complex_as

  subroutine f_check_c_float_complex_ar(a)
    complex(kind=c_float_complex), intent(in) :: a(..)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 18
    if(k/=4_c_signed_char) stop 19
    if(int(k, kind=c_size_t)/=(e/2)) stop 20
    if(t/=CFI_type_float_complex) stop 21
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_float_complex)>0.0_c_float_complex)) stop 22
    rank default
      stop 23
    end select
    call check_tk_ar(a, t, k, e, 1_c_size_t)
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_float_complex)>0.0_c_float_complex)) stop 24
    rank default
      stop 25
    end select
    return
  end subroutine f_check_c_float_complex_ar

  subroutine c_check_c_float_complex_ar(a) bind(c)
    complex(kind=c_float_complex), intent(in) :: a(..)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 26
    if(k/=4_c_signed_char) stop 27
    if(int(k, kind=c_size_t)/=(e/2)) stop 28
    if(t/=CFI_type_float_complex) stop 29
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_float_complex)>0.0_c_float_complex)) stop 30
    rank default
      stop 31
    end select
    call check_tk_ar(a, t, k, e, 1_c_size_t)
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_float_complex)>0.0_c_float_complex)) stop 32
    rank default
      stop 33
    end select
    return
  end subroutine c_check_c_float_complex_ar

  ! CFI_type_double_complex
  subroutine check_c_double_complex()
    complex(kind=c_double_complex) :: a(n)
    !
    if (c_double_complex/=8) stop 34
    a = ref_c_double_complex
    call f_check_c_double_complex_as(a)
    if(any(abs(a-ref_c_double_complex)>0.0_c_double_complex)) stop 35
    a = ref_c_double_complex
    call c_check_c_double_complex_as(a)
    if(any(abs(a-ref_c_double_complex)>0.0_c_double_complex)) stop 36
    a = ref_c_double_complex
    call f_check_c_double_complex_ar(a)
    if(any(abs(a-ref_c_double_complex)>0.0_c_double_complex)) stop 37
    a = ref_c_double_complex
    call c_check_c_double_complex_ar(a)
    if(any(abs(a-ref_c_double_complex)>0.0_c_double_complex)) stop 38
    return
  end subroutine check_c_double_complex

  subroutine f_check_c_double_complex_as(a)
    complex(kind=c_double_complex), intent(in) :: a(:)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 39
    if(k/=8_c_signed_char) stop 40
    if(int(k, kind=c_size_t)/=(e/2)) stop 41
    if(t/=CFI_type_double_complex) stop 42
    if(any(abs(a-ref_c_double_complex)>0.0_c_double_complex)) stop 43
    call check_tk_as(a, t, k, e, 1_c_size_t)
    if(any(abs(a-ref_c_double_complex)>0.0_c_double_complex)) stop 44
    return
  end subroutine f_check_c_double_complex_as

  subroutine c_check_c_double_complex_as(a) bind(c)
    complex(kind=c_double_complex), intent(in) :: a(:)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 45
    if(k/=8_c_signed_char) stop 46
    if(int(k, kind=c_size_t)/=(e/2)) stop 47
    if(t/=CFI_type_double_complex) stop 48
    if(any(abs(a-ref_c_double_complex)>0.0_c_double_complex)) stop 49
    call check_tk_as(a, t, k, e, 1_c_size_t)
    if(any(abs(a-ref_c_double_complex)>0.0_c_double_complex)) stop 50
    return
  end subroutine c_check_c_double_complex_as

  subroutine f_check_c_double_complex_ar(a)
    complex(kind=c_double_complex), intent(in) :: a(..)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 51
    if(k/=8_c_signed_char) stop 52
    if(int(k, kind=c_size_t)/=(e/2)) stop 53
    if(t/=CFI_type_double_complex) stop 54
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_double_complex)>0.0_c_double_complex)) stop 55
    rank default
      stop 56
    end select
    call check_tk_ar(a, t, k, e, 1_c_size_t)
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_double_complex)>0.0_c_double_complex)) stop 57
    rank default
      stop 58
    end select
    return
  end subroutine f_check_c_double_complex_ar

  subroutine c_check_c_double_complex_ar(a) bind(c)
    complex(kind=c_double_complex), intent(in) :: a(..)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 59
    if(k/=8_c_signed_char) stop 60
    if(int(k, kind=c_size_t)/=(e/2)) stop 61
    if(t/=CFI_type_double_complex) stop 62
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_double_complex)>0.0_c_double_complex)) stop 63
    rank default
      stop 64
    end select
    call check_tk_ar(a, t, k, e, 1_c_size_t)
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_double_complex)>0.0_c_double_complex)) stop 65
    rank default
      stop 66
    end select
    return
  end subroutine c_check_c_double_complex_ar

  ! CFI_type_long_double_complex
  subroutine check_c_long_double_complex()
    complex(kind=c_long_double_complex) :: a(n)
    !
    if (c_long_double_complex/=10) stop 67
    a = ref_c_long_double_complex
    call f_check_c_long_double_complex_as(a)
    if(any(abs(a-ref_c_long_double_complex)>0.0_c_long_double_complex)) stop 68
    a = ref_c_long_double_complex
    call c_check_c_long_double_complex_as(a)
    if(any(abs(a-ref_c_long_double_complex)>0.0_c_long_double_complex)) stop 69
    a = ref_c_long_double_complex
    call f_check_c_long_double_complex_ar(a)
    if(any(abs(a-ref_c_long_double_complex)>0.0_c_long_double_complex)) stop 70
    a = ref_c_long_double_complex
    call c_check_c_long_double_complex_ar(a)
    if(any(abs(a-ref_c_long_double_complex)>0.0_c_long_double_complex)) stop 71
    return
  end subroutine check_c_long_double_complex

  subroutine f_check_c_long_double_complex_as(a)
    complex(kind=c_long_double_complex), intent(in) :: a(:)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 72
    if(k/=10_c_signed_char) stop 73
    if(e/=32) stop 74
    if(t/=CFI_type_long_double_complex) stop 75
    if(any(abs(a-ref_c_long_double_complex)>0.0_c_long_double_complex)) stop 76
    call check_tk_as(a, t, k, e, 1_c_size_t)
    if(any(abs(a-ref_c_long_double_complex)>0.0_c_long_double_complex)) stop 77
    return
  end subroutine f_check_c_long_double_complex_as

  subroutine c_check_c_long_double_complex_as(a) bind(c)
    complex(kind=c_long_double_complex), intent(in) :: a(:)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 78
    if(k/=10_c_signed_char) stop 79
    if(e/=32) stop 80
    if(t/=CFI_type_long_double_complex) stop 81
    if(any(abs(a-ref_c_long_double_complex)>0.0_c_long_double_complex)) stop 82
    call check_tk_as(a, t, k, e, 1_c_size_t)
    if(any(abs(a-ref_c_long_double_complex)>0.0_c_long_double_complex)) stop 83
    return
  end subroutine c_check_c_long_double_complex_as

  subroutine f_check_c_long_double_complex_ar(a)
    complex(kind=c_long_double_complex), intent(in) :: a(..)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 84
    if(k/=10_c_signed_char) stop 85
    if(e/=32) stop 86
    if(t/=CFI_type_long_double_complex) stop 87
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_long_double_complex)>0.0_c_long_double_complex)) stop 88
    rank default
      stop 89
    end select
    call check_tk_ar(a, t, k, e, 1_c_size_t)
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_long_double_complex)>0.0_c_long_double_complex)) stop 90
    rank default
      stop 91
    end select
    return
  end subroutine f_check_c_long_double_complex_ar

  subroutine c_check_c_long_double_complex_ar(a) bind(c)
    complex(kind=c_long_double_complex), intent(in) :: a(..)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 92
    if(k/=10_c_signed_char) stop 93
    if(e/=32) stop 94
    if(t/=CFI_type_long_double_complex) stop 95
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_long_double_complex)>0.0_c_long_double_complex)) stop 96
    rank default
      stop 97
    end select
    call check_tk_ar(a, t, k, e, 1_c_size_t)
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_long_double_complex)>0.0_c_long_double_complex)) stop 98
    rank default
      stop 99
    end select
    return
  end subroutine c_check_c_long_double_complex_ar

  ! CFI_type_float128_complex
  subroutine check_c_float128_complex()
    complex(kind=c_float128_complex) :: a(n)
    !
    if (c_float128_complex/=16) stop 100
    a = ref_c_float128_complex
    call f_check_c_float128_complex_as(a)
    if(any(abs(a-ref_c_float128_complex)>0.0_c_float128_complex)) stop 101
    a = ref_c_float128_complex
    call c_check_c_float128_complex_as(a)
    if(any(abs(a-ref_c_float128_complex)>0.0_c_float128_complex)) stop 102
    a = ref_c_float128_complex
    call f_check_c_float128_complex_ar(a)
    if(any(abs(a-ref_c_float128_complex)>0.0_c_float128_complex)) stop 103
    a = ref_c_float128_complex
    call c_check_c_float128_complex_ar(a)
    if(any(abs(a-ref_c_float128_complex)>0.0_c_float128_complex)) stop 104
    return
  end subroutine check_c_float128_complex

  subroutine f_check_c_float128_complex_as(a)
    complex(kind=c_float128_complex), intent(in) :: a(:)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 105
    if(k/=16_c_signed_char) stop 106
    if(int(k, kind=c_size_t)/=(e/2)) stop 107
    if(t/=CFI_type_float128_complex) stop 108
    if(any(abs(a-ref_c_float128_complex)>0.0_c_float128_complex)) stop 109
    call check_tk_as(a, t, k, e, 1_c_size_t)
    if(any(abs(a-ref_c_float128_complex)>0.0_c_float128_complex)) stop 110
    return
  end subroutine f_check_c_float128_complex_as

  subroutine c_check_c_float128_complex_as(a) bind(c)
    complex(kind=c_float128_complex), intent(in) :: a(:)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 111
    if(k/=16_c_signed_char) stop 112
    if(int(k, kind=c_size_t)/=(e/2)) stop 113
    if(t/=CFI_type_float128_complex) stop 114
    if(any(abs(a-ref_c_float128_complex)>0.0_c_float128_complex)) stop 115
    call check_tk_as(a, t, k, e, 1_c_size_t)
    if(any(abs(a-ref_c_float128_complex)>0.0_c_float128_complex)) stop 116
    return
  end subroutine c_check_c_float128_complex_as

  subroutine f_check_c_float128_complex_ar(a)
    complex(kind=c_float128_complex), intent(in) :: a(..)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 117
    if(k/=16_c_signed_char) stop 118
    if(int(k, kind=c_size_t)/=(e/2)) stop 119
    if(t/=CFI_type_float128_complex) stop 120
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_float128_complex)>0.0_c_float128_complex)) stop 121
    rank default
      stop 122
    end select
    call check_tk_ar(a, t, k, e, 1_c_size_t)
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_float128_complex)>0.0_c_float128_complex)) stop 123
    rank default
      stop 124
    end select
    return
  end subroutine f_check_c_float128_complex_ar

  subroutine c_check_c_float128_complex_ar(a) bind(c)
    complex(kind=c_float128_complex), intent(in) :: a(..)
    !
    integer(kind=c_int16_t)     :: t
    integer(kind=c_signed_char) :: k
    integer(kind=c_size_t)      :: e
    !
    k = kind(a)
    e = storage_size(a)/b
    t = cfi_encode_type(CFI_type_complex, k)
    if(k<=0_c_signed_char) stop 125
    if(k/=16_c_signed_char) stop 126
    if(int(k, kind=c_size_t)/=(e/2)) stop 127
    if(t/=CFI_type_float128_complex) stop 128
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_float128_complex)>0.0_c_float128_complex)) stop 129
    rank default
      stop 130
    end select
    call check_tk_ar(a, t, k, e, 1_c_size_t)
    select rank(a)
    rank(1)
      if(any(abs(a-ref_c_float128_complex)>0.0_c_float128_complex)) stop 131
    rank default
      stop 132
    end select
    return
  end subroutine c_check_c_float128_complex_ar

end module iso_check_m

program main_p
  
  use :: iso_check_m, only:      &
    check_c_float_complex,       &
    check_c_double_complex,      &
    check_c_long_double_complex, &
    check_c_float128_complex

  implicit none

  call check_c_float_complex()
  call check_c_double_complex()
  ! see PR100910
  ! call check_c_long_double_complex()
  call check_c_float128_complex()
  stop

end program main_p

!! Local Variables:
!! mode: f90
!! End:

