[flang-commits] [flang] [flang] Associate named constant actual arguments with their storage (PR #222986)
via flang-commits
flang-commits at lists.llvm.org
Tue Sep 22 08:47:40 PDT 2026
================
@@ -132,6 +132,29 @@ void CheckImplicitInterfaceArg(evaluate::ActualArgument &arg,
// F'2023 15.5.2.12p1: "Sequence association only applies when the dummy
// argument is an explicit-shape or assumed-size array."
+// Total size in bytes of a whole object for storage-sequence checks.
+// A named constant has no storage assignment (symbol.size() is zero), so
+// measure it from its type and constant extents instead.
+static std::optional<std::int64_t> ObjectTotalBytes(
+ const Symbol &symbol, evaluate::FoldingContext &foldingContext) {
+ if (std::size_t bytes{symbol.size()}) {
+ return static_cast<std::int64_t>(bytes);
+ }
+ if (const Symbol &ultimate{symbol.GetUltimate()}; IsNamedConstant(ultimate)) {
+ if (auto type{evaluate::DynamicType::From(ultimate)}) {
+ if (auto extents{
+ evaluate::GetConstantExtents(foldingContext, &ultimate)}) {
+ if (auto bytes{evaluate::ToInt64(evaluate::Fold(foldingContext,
+ type->MeasureSizeInBytes(
+ foldingContext, evaluate::GetRank(*extents) > 0)))}) {
+ return *bytes * evaluate::GetSize(*extents);
----------------
jeanPerier wrote:
Can you make sure we have a test with implied-shape parameter arrays (I think GetConstantExtents should handle that but better safe than sorry).
https://github.com/llvm/llvm-project/pull/222986
More information about the flang-commits
mailing list