// 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> init { ^bb0(%arg0: !fir.ref>): %0 = fir.alloca !fir.box %1 = fir.alloca i32 %2 = fir.embox %1 : (!fir.ref) -> !fir.box // use the embox for something so it isn't removed fir.store %2 to %0 : !fir.ref> omp.yield(%0 : !fir.ref>) } combiner { ^bb0(%arg0: !fir.ref>, %arg1: !fir.ref>): %0 = fir.undefined !fir.ref> omp.yield(%0 : !fir.ref>) } func.func @_QQmain() attributes {fir.bindc_name = "reduce"} { %4 = fir.alloca !fir.box omp.parallel reduction(byref @test_reduction %4 -> %arg0 : !fir.ref>) { omp.terminator } func.call @__use_box_i32(%4) : (!fir.ref>) -> () return } func.func private @__use_box_i32(!fir.ref>) -> () // 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