! Test dummy procedures that are not an argument in every entry.
! This requires creating a mock value in the entries where it is
! not an argument.
! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s

subroutine dummy_with_iface()
  interface
    real function x()
    end function
  end interface
  entry dummy_with_iface_entry(x)
  call takes_real(x())
end subroutine
! CHECK-LABEL: func @_QPdummy_with_iface() {
! CHECK:  %[[VAL_0:.*]] = fir.alloca f32 {adapt.valuebyref}
! CHECK:  %[[VAL_1:.*]] = fir.undefined !fir.boxproc<() -> ()>
! CHECK:  br ^bb1
! CHECK:  ^bb1:
! CHECK:  %[[VAL_2:.*]] = fir.box_addr %[[VAL_1]] : (!fir.boxproc<() -> ()>) -> (() -> f32)
! CHECK:  %[[VAL_3:.*]] = fir.call %[[VAL_2]]() {{.*}}: () -> f32
! CHECK:  fir.store %[[VAL_3]] to %[[VAL_0]] : !fir.ref<f32>
! CHECK:  fir.call @_QPtakes_real(%[[VAL_0]]) {{.*}}: (!fir.ref<f32>) -> ()

! CHECK-LABEL: func @_QPdummy_with_iface_entry(
! CHECK-SAME:  %[[VAL_0:.*]]: !fir.boxproc<() -> ()>) {
! CHECK:  %[[VAL_1:.*]] = fir.alloca f32 {adapt.valuebyref}
! CHECK:  br ^bb1
! CHECK:  ^bb1:
! CHECK:  %[[VAL_2:.*]] = fir.box_addr %[[VAL_0]] : (!fir.boxproc<() -> ()>) -> (() -> f32)
! CHECK:  %[[VAL_3:.*]] = fir.call %[[VAL_2]]() {{.*}}: () -> f32
! CHECK:  fir.store %[[VAL_3]] to %[[VAL_1]] : !fir.ref<f32>
! CHECK:  fir.call @_QPtakes_real(%[[VAL_1]]) {{.*}}: (!fir.ref<f32>) -> ()

subroutine subroutine_dummy()
  entry subroutine_dummy_entry(x)
  call x()
end subroutine
! CHECK-LABEL: func @_QPsubroutine_dummy() {
! CHECK:  %[[VAL_0:.*]] = fir.undefined !fir.boxproc<() -> ()>
! CHECK:  br ^bb1
! CHECK:  ^bb1:
! CHECK:  %[[VAL_1:.*]] = fir.box_addr %[[VAL_0]] : (!fir.boxproc<() -> ()>) -> (() -> ())
! CHECK:  fir.call %[[VAL_1]]() {{.*}}: () -> ()

! CHECK-LABEL: func @_QPsubroutine_dummy_entry(
! CHECK-SAME:  %[[VAL_0:.*]]: !fir.boxproc<() -> ()>) {
! CHECK:  br ^bb1
! CHECK:  ^bb1:
! CHECK:  %[[VAL_1:.*]] = fir.box_addr %[[VAL_0]] : (!fir.boxproc<() -> ()>) -> (() -> ())
! CHECK:  fir.call %[[VAL_1]]() {{.*}}: () -> ()
