[flang-commits] [flang] [Flang][OpenMP] Allow Fortran BLOCK construct inside WORKSHARE region (PR #193352)
via flang-commits
flang-commits at lists.llvm.org
Sun Apr 26 16:20:16 PDT 2026
https://github.com/blazie2004 updated https://github.com/llvm/llvm-project/pull/193352
>From a7ff241e72ae9cb2dfe2b3dd7a4d23295435644e Mon Sep 17 00:00:00 2001
From: Jay Satish Kumar Patel <kumarpat at pe31.hpc.amslabs.hpecorp.net>
Date: Tue, 21 Apr 2026 17:58:57 -0500
Subject: [PATCH 1/2] Allow Fortran BLOCK construct inside WORKSHARE
---
flang/lib/Semantics/check-omp-structure.cpp | 6 ++++++
flang/test/Semantics/OpenMP/workshare06.f90 | 12 ++++++++++++
2 files changed, 18 insertions(+)
create mode 100644 flang/test/Semantics/OpenMP/workshare06.f90
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index 98de595ce0621..fa7753f7f7f83 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -5419,6 +5419,12 @@ void OmpStructureChecker::CheckWorkshareBlockStmts(
parser::Unwrap<parser::WhereStmt>(*it) ||
parser::Unwrap<parser::WhereConstruct>(*it)) {
parser::Walk(*it, ompWorkshareBlockChecker);
+ } else if (const auto *blockConstruct{
+ parser::Unwrap<parser::BlockConstruct>(*it)}) {
+ // Fortran BLOCK construct is a transparent scoping wrapper.
+ // Recursively check the statements inside it.
+ const auto &nestedBlock{std::get<parser::Block>(blockConstruct->t)};
+ CheckWorkshareBlockStmts(nestedBlock, source);
} else if (const auto *ompConstruct{
parser::Unwrap<parser::OpenMPConstruct>(*it)}) {
if (const auto *ompAtomicConstruct{
diff --git a/flang/test/Semantics/OpenMP/workshare06.f90 b/flang/test/Semantics/OpenMP/workshare06.f90
new file mode 100644
index 0000000000000..c0a75ea754777
--- /dev/null
+++ b/flang/test/Semantics/OpenMP/workshare06.f90
@@ -0,0 +1,12 @@
+! RUN: %python %S/../test_errors.py %s %flang -fopenmp
+! Test that Fortran BLOCK constructs are allowed inside WORKSHARE
+! when they contain only WORKSHARE-valid statements.
+
+subroutine test(a, b)
+ real :: a, b
+ !$omp workshare
+ block
+ a = b
+ end block
+ !$omp end workshare
+end subroutine
\ No newline at end of file
>From 5d20d589c88e27bdd0c3e1d8d60a33bda66dd7a5 Mon Sep 17 00:00:00 2001
From: Jay Satish Kumar Patel <kumarpat at pe31.hpc.amslabs.hpecorp.net>
Date: Sun, 26 Apr 2026 18:19:51 -0500
Subject: [PATCH 2/2] added missing new line
---
flang/test/Semantics/OpenMP/workshare06.f90 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/flang/test/Semantics/OpenMP/workshare06.f90 b/flang/test/Semantics/OpenMP/workshare06.f90
index c0a75ea754777..21677c726c7a5 100644
--- a/flang/test/Semantics/OpenMP/workshare06.f90
+++ b/flang/test/Semantics/OpenMP/workshare06.f90
@@ -9,4 +9,4 @@ subroutine test(a, b)
a = b
end block
!$omp end workshare
-end subroutine
\ No newline at end of file
+end subroutine
More information about the flang-commits
mailing list