llvm-project
4219fb8a - [flang] Fix FIRToMemRef index computation for array_coor with shape_shift and slice (#186523)

Commit
30 days ago
[flang] Fix FIRToMemRef index computation for array_coor with shape_shift and slice (#186523) When fir.array_coor carries an explicit shape_shift (non-default lower bounds) and an explicit slice, the indices are Fortran indices rather than 1-based section indices. The FIRToMemRef pass was unconditionally subtracting 1 from sliced indices, which is only correct for 1-based section indices (the embox-with-embedded-slice case). For shape_shift + explicit slice, the correct adjustment is to subtract the slice lower bound instead of 1. This produces proper 0-based memref indices. This pattern arises after the FIR inliner canonicalizes fir.embox(shape_shift, slice) + fir.array_coor(box) into a single fir.array_coor with explicit shape_shift and slice operands, where the indices become Fortran indices. Without this fix, arrays with non-default lower bounds (e.g., A(0:N) or A(-1:N)) produce negative memref indices, writing before the array allocation and causing a segfault.
Author
Parents
Loading