[flang-commits] [flang] [flang] Add semantics support for Fortran 2023 conditional arguments (F2023 R1526-R1528) (PR #195345)
Vineet Kumar via flang-commits
flang-commits at lists.llvm.org
Thu Jun 25 07:15:45 PDT 2026
================
@@ -1392,6 +1397,88 @@ static void CheckProcedureArg(evaluate::ActualArgument &arg,
}
}
+// F2023 C1540-C1543, C1545: Check conditional argument against dummy data
+// object
+static void CheckConditionalArg(
+ const evaluate::ActualArgument::ConditionalArg &condArg,
+ const characteristics::DummyDataObject &object,
+ const std::string &dummyName, parser::ContextualMessages &messages) {
+ // C1540: .NIL. shall not appear if dummy is not optional
+ if (condArg.HasNilConsequent() &&
+ !object.attrs.test(characteristics::DummyDataObject::Attr::Optional)) {
+ messages.Say(
+ ".NIL. in conditional argument associated with non-optional %s"_err_en_US,
+ dummyName);
+ }
+ // Check a single consequent for C1541, C1543, C1542
+ auto checkOneConsequent{[&](const evaluate::ActualArgument::ConditionalArg::
+ Consequent &cons) {
+ if (!cons) {
+ return;
+ }
+ const auto &consExpr{cons->value()};
+ // C1541: INTENT(OUT/INOUT) requires variable
+ if ((object.intent == common::Intent::Out ||
+ object.intent == common::Intent::InOut) &&
+ !evaluate::IsVariable(consExpr)) {
+ messages.Say(
+ "Each consequent-arg in conditional argument associated with INTENT(%s) %s must be a variable"_err_en_US,
+ object.intent == common::Intent::Out ? "OUT" : "IN OUT", dummyName);
+ }
+ // C1543: assumed-rank consequent-arg requires assumed-rank dummy
+ if (semantics::IsAssumedRank(consExpr) &&
+ !object.type.attrs().test(
+ characteristics::TypeAndShape::Attr::AssumedRank)) {
+ messages.Say(
+ "Assumed-rank consequent-arg in conditional argument may only be associated with assumed-rank %s"_err_en_US,
+ dummyName);
+ }
+ // C1542: coarray attribute
----------------
vntkmr wrote:
done.
https://github.com/llvm/llvm-project/pull/195345
More information about the flang-commits
mailing list