diff --git a/flang/runtime/derived.cpp b/flang/runtime/derived.cpp --- a/flang/runtime/derived.cpp +++ b/flang/runtime/derived.cpp @@ -225,14 +225,18 @@ std::size_t myComponents{componentDesc.Elements()}; std::size_t elements{descriptor.Elements()}; std::size_t byteStride{descriptor.ElementBytes()}; + SubscriptValue at[maxRank]; + descriptor.GetLowerBounds(at); for (std::size_t k{0}; k < myComponents; ++k) { const auto &comp{ *componentDesc.ZeroBasedIndexedElement(k)}; if (comp.genre() == typeInfo::Component::Genre::Allocatable || comp.genre() == typeInfo::Component::Genre::Automatic) { for (std::size_t j{0}; j < elements; ++j) { - descriptor.OffsetElement(j * byteStride + comp.offset()) - ->Deallocate(); + Descriptor *d{reinterpret_cast( + descriptor.Element(at) + comp.offset())}; + d->Deallocate(); + descriptor.IncrementSubscripts(at); } } }