diff --git a/flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.td b/flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.td index d48caf1a8cb3b..04f839386498c 100644 --- a/flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.td +++ b/flang/include/flang/Optimizer/Dialect/FIRCG/CGOps.td @@ -60,7 +60,8 @@ def fircg_XEmboxOp : fircg_Op<"ext_embox", [AttrSizedOperandSegments]> { Variadic:$slice, Variadic:$subcomponent, Variadic:$substr, Variadic:$lenParams, - Optional:$sourceBox, OptionalAttr:$allocator_idx); + Optional:$sourceBox, + OptionalAttr:$allocator_idx); let results = (outs BoxOrClassType); let assemblyFormat = [{ diff --git a/flang/include/flang/Optimizer/Dialect/FIROps.td b/flang/include/flang/Optimizer/Dialect/FIROps.td index e3f5c4403002a..99b5105ab365e 100644 --- a/flang/include/flang/Optimizer/Dialect/FIROps.td +++ b/flang/include/flang/Optimizer/Dialect/FIROps.td @@ -834,15 +834,11 @@ def fir_EmboxOp : fir_Op<"embox", [NoMemoryEffect, AttrSizedOperandSegments]> { - allocator_idx: specify special allocator to use. }]; - let arguments = (ins - AnyReferenceLike:$memref, - Optional:$shape, - Optional:$slice, - Variadic:$typeparams, - Optional:$sourceBox, - OptionalAttr:$accessMap, - OptionalAttr:$allocator_idx - ); + let arguments = (ins AnyReferenceLike:$memref, Optional:$shape, + Optional:$slice, Variadic:$typeparams, + Optional:$sourceBox, + OptionalAttr:$accessMap, + OptionalAttr:$allocator_idx); let results = (outs BoxOrClassType); diff --git a/flang/include/flang/Optimizer/Dialect/FIRTypes.td b/flang/include/flang/Optimizer/Dialect/FIRTypes.td index 0ead54df3ca97..2fdc9a96804da 100644 --- a/flang/include/flang/Optimizer/Dialect/FIRTypes.td +++ b/flang/include/flang/Optimizer/Dialect/FIRTypes.td @@ -626,8 +626,10 @@ def AnyBoxLike : TypeConstraint, "any box">; -def BoxOrClassType : TypeConstraint, "box or class">; +def BoxOrClassLike + : TypeConstraint, + "box or class">; +def BoxOrClassType : Type; def AnyRefOrBoxLike : TypeConstraint, diff --git a/flang/test/Fir/fir-ops.fir b/flang/test/Fir/fir-ops.fir index 3585bf9efca3e..0892eb9fa0de8 100644 --- a/flang/test/Fir/fir-ops.fir +++ b/flang/test/Fir/fir-ops.fir @@ -843,6 +843,16 @@ func.func @embox_tdesc(%arg0: !fir.class>, +// CHECK-SAME: %[[ARG1:.*]]: !fir.shape<1>, +// CHECK-SAME: %[[ARG2:.*]]: !fir.box>) -> !fir.class>> { +func.func @embox_with_source_box(%arg0: !fir.heap>, %arg1: !fir.shape<1>, %arg2: !fir.box>) -> !fir.class>> { +// CHECK: %[[VAL_0:.*]] = fir.embox %[[ARG0]](%[[ARG1]]) source_box %[[ARG2]] : (!fir.heap>, !fir.shape<1>, !fir.box>) -> !fir.class>> + %0 = fir.embox %arg0(%arg1) source_box %arg2 : (!fir.heap>, !fir.shape<1>, !fir.box>) -> !fir.class>> + return %0 : !fir.class>> +} + func.func @test_fortran_var_attrs() { %0 = fir.alloca !fir.heap {fortran_attrs = #fir.var_attrs} %1 = fir.alloca f32 {fortran_attrs = #fir.var_attrs}