[flang-commits] [flang] [flang] Catch misuse of assumed-rank dummy argument (PR #173786)

Peter Klausler via flang-commits flang-commits at lists.llvm.org
Sun Dec 28 08:13:05 PST 2025


https://github.com/klausler created https://github.com/llvm/llvm-project/pull/173786

Assumed-rank dummy arguments can't be parenthesized.

Fixes https://github.com/llvm/llvm-project/issues/173593.

>From e156681603dc698e05d5865011f3740b38d1d7fb Mon Sep 17 00:00:00 2001
From: Peter Klausler <pklausler at nvidia.com>
Date: Sun, 28 Dec 2025 08:10:34 -0800
Subject: [PATCH] [flang] Catch misuse of assumed-rank dummy argument

Assumed-rank dummy arguments can't be parenthesized.

Fixes https://github.com/llvm/llvm-project/issues/173593.
---
 flang/lib/Semantics/expression.cpp |  2 ++
 flang/test/Semantics/bug173593.f90 | 12 ++++++++++++
 2 files changed, 14 insertions(+)
 create mode 100644 flang/test/Semantics/bug173593.f90

diff --git a/flang/lib/Semantics/expression.cpp b/flang/lib/Semantics/expression.cpp
index 6f5d0bf9eb242..8bf07f4aef63e 100644
--- a/flang/lib/Semantics/expression.cpp
+++ b/flang/lib/Semantics/expression.cpp
@@ -3760,6 +3760,8 @@ MaybeExpr ExpressionAnalyzer::Analyze(const parser::Expr::Parentheses &x) {
   if (MaybeExpr operand{Analyze(x.v.value())}) {
     if (IsNullPointerOrAllocatable(&*operand)) {
       Say("NULL() may not be parenthesized"_err_en_US);
+    } else if (semantics::IsAssumedRank(*operand)) {
+      Say("An assumed-rank dummy argument may not be parenthesized"_err_en_US);
     } else if (const semantics::Symbol *symbol{GetLastSymbol(*operand)}) {
       if (const semantics::Symbol *result{FindFunctionResult(*symbol)}) {
         if (semantics::IsProcedurePointer(*result)) {
diff --git a/flang/test/Semantics/bug173593.f90 b/flang/test/Semantics/bug173593.f90
new file mode 100644
index 0000000000000..99cd62c97e02e
--- /dev/null
+++ b/flang/test/Semantics/bug173593.f90
@@ -0,0 +1,12 @@
+!RUN: %python %S/test_errors.py %s %flang_fc1
+module m
+ contains
+  subroutine s1(x)
+    integer :: x(..)
+    !ERROR: An assumed-rank dummy argument may not be parenthesized
+    call s2((x))
+  end
+  subroutine s2(y)
+    integer :: y(..)
+  end
+end



More information about the flang-commits mailing list