[flang-commits] [flang] 0a79113 - [flang] Replace crash and improve a semantics TODO message
Peter Klausler via flang-commits
flang-commits at lists.llvm.org
Tue May 24 14:06:32 PDT 2022
Author: Peter Klausler
Date: 2022-05-24T14:01:22-07:00
New Revision: 0a79113b9e064e50f660ebe6e257bf69ba028026
URL: https://github.com/llvm/llvm-project/commit/0a79113b9e064e50f660ebe6e257bf69ba028026
DIFF: https://github.com/llvm/llvm-project/commit/0a79113b9e064e50f660ebe6e257bf69ba028026.diff
LOG: [flang] Replace crash and improve a semantics TODO message
The derived type information table construction code had a
crash whose root cause was replacing an expression with one
of its operands -- the deletion of the LHS of that assignment
led to the RHS being invalidated before it could be read.
Fix by cloning the RHS. Also update a TODO message to the
new "_todo_en_US" message class and add a comment about how
it should be resolved.
Differential Revision: https://reviews.llvm.org/D126154
Added:
Modified:
flang/lib/Semantics/runtime-type-info.cpp
Removed:
################################################################################
diff --git a/flang/lib/Semantics/runtime-type-info.cpp b/flang/lib/Semantics/runtime-type-info.cpp
index d24b844bd7b5..eae8c0c977a2 100644
--- a/flang/lib/Semantics/runtime-type-info.cpp
+++ b/flang/lib/Semantics/runtime-type-info.cpp
@@ -103,9 +103,13 @@ class RuntimeTableBuilder {
lenParameterEnum_, FindLenParameterIndex(*parameters, *lenParam));
}
}
+ // TODO: Replace a specification expression requiring actual operations
+ // with a reference to a new anonymous LEN type parameter whose default
+ // value captures the expression. This replacement must take place when
+ // the type is declared so that the new LEN type parameters appear in
+ // all instantiations and structure constructors.
context_.Say(location_,
- "Specification expression '%s' is neither constant nor a length "
- "type parameter"_err_en_US,
+ "derived type specification expression '%s' that is neither constant nor a length type parameter"_todo_en_US,
expr->AsFortran());
}
return PackageIntValue(deferredEnum_);
@@ -734,7 +738,7 @@ evaluate::StructureConstructor RuntimeTableBuilder::DescribeComponent(
evaluate::Extremum<evaluate::SubscriptInteger>>(*len)}) {
if (clamped->ordering == evaluate::Ordering::Greater &&
clamped->left() == evaluate::Expr<evaluate::SubscriptInteger>{0}) {
- len = clamped->right();
+ len = common::Clone(clamped->right());
}
}
AddValue(values, componentSchema_, "characterlen"s,
More information about the flang-commits
mailing list