Index: flang/docs/Extensions.md =================================================================== --- flang/docs/Extensions.md +++ flang/docs/Extensions.md @@ -175,6 +175,10 @@ * OPEN(ACCESS='APPEND') is interpreted as OPEN(POSITION='APPEND') to ease porting from Sun Fortran. * Intrinsic subroutines EXIT([status]) and ABORT() +* The definition of simple contiguity in 9.5.4 applies only to arrays; + we also treat scalars as being trivially contiguous, so that they + can be used in contexts like data targets in pointer assignments + with bounds remapping. ### Extensions supported when enabled by options Index: flang/lib/Evaluate/check-expression.cpp =================================================================== --- flang/lib/Evaluate/check-expression.cpp +++ flang/lib/Evaluate/check-expression.cpp @@ -626,8 +626,12 @@ Result operator()(const semantics::Symbol &symbol) const { const auto &ultimate{symbol.GetUltimate()}; - if (ultimate.attrs().test(semantics::Attr::CONTIGUOUS) || - ultimate.Rank() == 0) { + if (ultimate.attrs().test(semantics::Attr::CONTIGUOUS)) { + return true; + } else if (ultimate.Rank() == 0) { + // Extension: accept scalars as a degenerate case of + // simple contiguity to allow their use in contexts like + // data targets in pointer assignments with remapping. return true; } else if (semantics::IsPointer(ultimate)) { return false;