// RUN: tco %s | FileCheck %s

// the fir.embox in the init region is turned into an alloca for the box. Test
// that CodeGen.cpp knows where to place an alloca when it is inside of an
// omp.declare_reduction

// regretably this has to be nonsense IR because we need the subsequent patches
// to process anything useful

omp.declare_reduction @test_reduction : !fir.ref<!fir.box<i32>> init {
^bb0(%arg0: !fir.ref<!fir.box<i32>>):
  %0 = fir.alloca !fir.box<i32>
  %1 = fir.alloca i32
  %2 = fir.embox %1 : (!fir.ref<i32>) -> !fir.box<i32>

  // use the embox for something so it isn't removed
  fir.store %2 to %0 : !fir.ref<!fir.box<i32>>

  omp.yield(%0 : !fir.ref<!fir.box<i32>>)
} combiner {
^bb0(%arg0: !fir.ref<!fir.box<i32>>, %arg1: !fir.ref<!fir.box<i32>>):
  %0 = fir.undefined !fir.ref<!fir.box<i32>>
  omp.yield(%0 : !fir.ref<!fir.box<i32>>)
}

func.func @_QQmain() attributes {fir.bindc_name = "reduce"} {
  %4 = fir.alloca !fir.box<i32>
  omp.parallel reduction(byref @test_reduction %4 -> %arg0 : !fir.ref<!fir.box<i32>>) {
    omp.terminator
  }
  return
}

// basically we are testing that there isn't a crash
// CHECK-LABEL: define void @_QQmain
// CHECK-NEXT:    alloca { ptr, i64, i32, i8, i8, i8, i8 }, i64 1, align 8
