llvm/flang/test/Evaluate/logical-args.f90

! Test that actual logical arguments convert to the right kind when it is non-default
! RUN: %flang_fc1 -fdebug-unparse %s 2>&1 | FileCheck %s
! RUN: %flang_fc1 -fdebug-unparse -fdefault-integer-8 %s 2>&1 | FileCheck %s --check-prefixes CHECK-8

module m
  interface foog
     subroutine foo4(l)
       logical(kind=4), intent(in) :: l
     end subroutine foo4
     subroutine foo8(l)
       logical(kind=8), intent(in) :: l
     end subroutine foo8
  end interface foog
end module m

program main
  use m
  integer :: x(10), y

  ! CHECK: CALL foo(.true._4)
  ! CHECK-8: CALL foo(.true._8)
  call foo(.true.)
  ! CHECK: CALL foo(.true._4)
  ! CHECK-8: CALL foo(.true._8)
  call foo(1 < 2)
  ! CHECK: CALL foo(x(1_8)>y)
  ! CHECK-8: CALL foo(logical(x(1_8)>y,kind=8))
  call foo(x(1) > y)
  ! CHECK: CALL fooa(x>y)
  ! CHECK-8: CALL fooa(logical(x>y,kind=8))
  call fooa(x > y)

  ! Ensure that calls to interfaces call the correct subroutine
  ! CHECK: CALL foo4(.true._4)
  ! CHECK-8: CALL foo8(.true._8)
  call foog(.true.)
  ! CHECK: CALL foo4(.true._4)
  ! CHECK-8: CALL foo8(.true._8)
  call foog(1 < 2)
  ! CHECK: CALL foo4(x(1_8)>y)
  ! CHECK-8: CALL foo8(logical(x(1_8)>y,kind=8))
  call foog(x(1) > y)

 contains
  subroutine foo(l)
    logical :: l
  end subroutine foo
  subroutine fooa(l)
    logical :: l(10)
  end subroutine fooa
end program main