!RUN: %flang_fc1 -emit-fir -fopenmp %s -o - | FileCheck %s
!RUN: %flang_fc1 -emit-fir -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s  --check-prefix=DEVICE
!RUN: bbc -emit-fir -fopenmp %s -o - | FileCheck %s
!RUN: bbc -emit-fir -fopenmp -fopenmp-is-target-device %s -o - | FileCheck %s --check-prefix=DEVICE

! CHECK-LABEL: func.func @_QPimplicitly_captured
! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}}
function implicitly_captured(toggle) result(k)
   integer :: i, j, k
   logical :: toggle
   i = 10
   j = 5
   if (toggle) then
      k = i
   else
      k = j
   end if
end function implicitly_captured


! CHECK-LABEL: func.func @_QPtarget_function
! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}}
function target_function(toggle) result(i)
!$omp declare target
   integer :: i
   logical :: toggle
   i = implicitly_captured(toggle)
end function target_function

!! -----

! CHECK-LABEL: func.func @_QPimplicitly_captured_twice
! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}}
function implicitly_captured_twice() result(k)
   integer :: i
   i = 10
   k = i
end function implicitly_captured_twice

! CHECK-LABEL: func.func @_QPtarget_function_twice_host
! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (host), capture_clause = (to)>{{.*}}}
function target_function_twice_host() result(i)
!$omp declare target to(target_function_twice_host) device_type(host)
   integer :: i
   i = implicitly_captured_twice()
end function target_function_twice_host

! DEVICE-LABEL: func.func @_QPtarget_function_twice_device
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to)>{{.*}}}
function target_function_twice_device() result(i)
!$omp declare target to(target_function_twice_device) device_type(nohost)
   integer :: i
   i = implicitly_captured_twice()
end function target_function_twice_device

!! -----

! DEVICE-LABEL: func.func @_QPimplicitly_captured_nest
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to)>{{.*}}}
function implicitly_captured_nest() result(k)
   integer :: i
   i = 10
   k = i
end function implicitly_captured_nest

! DEVICE-LABEL: func.func @_QPimplicitly_captured_one
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to){{.*}}}
function implicitly_captured_one() result(k)
   k = implicitly_captured_nest()
end function implicitly_captured_one

! DEVICE-LABEL: func.func @_QPimplicitly_captured_two
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to)>{{.*}}}
function implicitly_captured_two() result(k)
   integer :: i
   i = 10
   k = i
end function implicitly_captured_two

! DEVICE-LABEL: func.func @_QPtarget_function_test
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to)>{{.*}}}
function target_function_test() result(j)
!$omp declare target to(target_function_test) device_type(nohost)
   integer :: i, j
   i = implicitly_captured_one()
   j = implicitly_captured_two() + i
end function target_function_test

!! -----

! CHECK-LABEL: func.func @_QPimplicitly_captured_nest_twice
! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}}
function implicitly_captured_nest_twice() result(k)
   integer :: i
   i = 10
   k = i
end function implicitly_captured_nest_twice

! CHECK-LABEL: func.func @_QPimplicitly_captured_one_twice
! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}}
function implicitly_captured_one_twice() result(k)
   k = implicitly_captured_nest_twice()
end function implicitly_captured_one_twice

! CHECK-LABEL: func.func @_QPimplicitly_captured_two_twice
! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}}
function implicitly_captured_two_twice() result(k)
   integer :: i
   i = 10
   k = i
end function implicitly_captured_two_twice

! DEVICE-LABEL: func.func @_QPtarget_function_test_device
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to)>{{.*}}}
function target_function_test_device() result(j)
   !$omp declare target to(target_function_test_device) device_type(nohost)
   integer :: i, j
   i = implicitly_captured_one_twice()
   j = implicitly_captured_two_twice() + i
end function target_function_test_device

! CHECK-LABEL: func.func @_QPtarget_function_test_host
! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (host), capture_clause = (to)>{{.*}}}
function target_function_test_host() result(j)
   !$omp declare target to(target_function_test_host) device_type(host)
   integer :: i, j
   i = implicitly_captured_one_twice()
   j = implicitly_captured_two_twice() + i
end function target_function_test_host

!! -----

! DEVICE-LABEL: func.func @_QPimplicitly_captured_with_dev_type_recursive
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}}
recursive function implicitly_captured_with_dev_type_recursive(increment) result(k)
!$omp declare target to(implicitly_captured_with_dev_type_recursive) device_type(host)
   integer :: increment, k
   if (increment == 10) then
      k = increment
   else
      k = implicitly_captured_with_dev_type_recursive(increment + 1)
   end if
end function implicitly_captured_with_dev_type_recursive

! DEVICE-LABEL: func.func @_QPtarget_function_with_dev_type_recurse
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to)>{{.*}}}
function target_function_with_dev_type_recurse() result(i)
!$omp declare target to(target_function_with_dev_type_recurse) device_type(nohost)
   integer :: i
   i = implicitly_captured_with_dev_type_recursive(0)
end function target_function_with_dev_type_recurse

!! -----

module test_module
contains
! CHECK-LABEL: func.func @_QMtest_modulePimplicitly_captured_nest_twice
! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}}
   function implicitly_captured_nest_twice() result(i)
      integer :: i
      i = 10
   end function implicitly_captured_nest_twice

! CHECK-LABEL: func.func @_QMtest_modulePimplicitly_captured_one_twice
! CHECK-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (any), capture_clause = (to)>{{.*}}}
   function implicitly_captured_one_twice() result(k)
      !$omp declare target to(implicitly_captured_one_twice) device_type(host)
      k = implicitly_captured_nest_twice()
   end function implicitly_captured_one_twice

! DEVICE-LABEL: func.func @_QMtest_modulePimplicitly_captured_two_twice
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to)>{{.*}}}
   function implicitly_captured_two_twice() result(y)
      integer :: y
      y = 5
   end function implicitly_captured_two_twice

! DEVICE-LABEL: func.func @_QMtest_modulePtarget_function_test_device
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to)>{{.*}}}
   function target_function_test_device() result(j)
      !$omp declare target to(target_function_test_device) device_type(nohost)
      integer :: i, j
      i = implicitly_captured_one_twice()
      j = implicitly_captured_two_twice() + i
   end function target_function_test_device
end module test_module

!! -----

program mb
   interface
      subroutine caller_recursive
         !$omp declare target to(caller_recursive) device_type(nohost)
      end subroutine

      recursive subroutine implicitly_captured_recursive(increment)
         integer :: increment
      end subroutine
   end interface
end program

! DEVICE-LABEL: func.func @_QPimplicitly_captured_recursive
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to)>{{.*}}}
recursive subroutine implicitly_captured_recursive(increment)
   integer :: increment
   if (increment == 10) then
      return
   else
      call implicitly_captured_recursive(increment + 1)
   end if
end subroutine

! DEVICE-LABEL: func.func @_QPcaller_recursive
! DEVICE-SAME: {{.*}}attributes {omp.declare_target = #omp.declaretarget<device_type = (nohost), capture_clause = (to)>{{.*}}}
subroutine caller_recursive
!$omp declare target to(caller_recursive) device_type(nohost)
   call implicitly_captured_recursive(0)
end subroutine
