================
@@ -9097,12 +9109,19 @@ class MappableExprsHandler {
// If there is an entry in PartialStruct it means we have a struct with
// individual members mapped. Emit an extra combined entry.
if (PartialStruct.Base.isValid()) {
- GroupUnionCurInfo.NonContigInfo.Dims.push_back(0);
- emitCombinedEntry(
- CurInfo, GroupUnionCurInfo.Types, PartialStruct, AttachInfo,
- /*IsMapThis*/ !VD, OMPBuilder, VD,
- /*OffsetForMemberOfFlag=*/CombinedInfo.BasePointers.size(),
- /*NotTargetParam=*/true);
+ // Prepend a synthetic dimension of length 1 to represent the
+ // aggregated struct object. Using 1 (not 0, as 0 produced an
+ // incorrect non-contiguous descriptor (DimSize==1), causing the
+ // non-contiguous motion clause path to be skipped.) is important:
+ // * It preserves the correct rank so targetDataUpdate() computes
+ // DimSize == 2 for cases like strided array sections originating
+ // from user-defined mappers (e.g. test with s.data[0:8:2]).
+ GroupUnionCurInfo.NonContigInfo.Dims.insert(
+ GroupUnionCurInfo.NonContigInfo.Dims.begin(), 1);
+ emitCombinedEntry(CurInfo, GroupUnionCurInfo.Types, PartialStruct,
+ AttachInfo, /*IsMapThis=*/!VD, OMPBuilder, VD,
+ /*OffsetForMemberOfFlag=*/0,
----------------
amitamd7 wrote:
I have reverted the change. It is orthogonal to this patch. Thanks for pointing
out.
https://github.com/llvm/llvm-project/pull/157443
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits