[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