[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