[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:11:09 PDT 2026


================
@@ -4819,9 +4822,121 @@ void ArgumentAnalyzer::Analyze(
               actual->set_isPercentVal();
             }
           },
-          [&](const parser::ConditionalArg &) {
-            context_.Say(
-                "Fortran 2023 conditional arguments are not yet supported"_todo_en_US);
+          [&](const parser::ConditionalArg &condArg) {
+            // F2023 R1526 conditional-arg analysis (recursive)
+            using EvalConsequent = ActualArgument::ConditionalArg::Consequent;
+            using EvalConditionalArg = ActualArgument::ConditionalArg;
+            using EvalTail =
+                ActualArgument::ConditionalArg::ConditionalArgPartOrConsequent;
+
+            // Analyze a single parser::Consequent into an evaluate Consequent
+            auto analyzeConsequent{[&](const parser::ConditionalArg::Consequent
+                                           &consequent) -> EvalConsequent {
+              EvalConsequent result;
+              common::visit(
+                  common::visitors{
+                      [&](const common::Indirection<parser::Expr> &expr) {
+                        // F2023 15.5.2.3-2: consequent-args are actual
+                        // arguments, so TYPE(*) dummies are permitted here
+                        // (F2018 C710 (F2023 C715) waived).
+                        auto restorer{context_.AllowAssumedTypeDummy()};
----------------
vntkmr wrote:

Fixed by making the restorer conditional on the entire consequent-arg `expr` being assumed-type.

https://github.com/llvm/llvm-project/pull/195345


More information about the flang-commits mailing list