[flang-commits] [flang] [Flang] Handle the source information (scopes) for some OpenMP constructs (PR #109097)
Thirumalai Shaktivel via flang-commits
flang-commits at lists.llvm.org
Wed Sep 18 00:58:36 PDT 2024
https://github.com/Thirumalai-Shaktivel created https://github.com/llvm/llvm-project/pull/109097
Fixes: https://github.com/llvm/llvm-project/issues/82943
Fixes: https://github.com/llvm/llvm-project/issues/82942
Fixes: https://github.com/llvm/llvm-project/issues/85593
>From 2788a46c0b74f249540e4fccdddd5de8f14949f1 Mon Sep 17 00:00:00 2001
From: Thirumalai-Shaktivel <thirumalaishaktivel at gmail.com>
Date: Wed, 18 Sep 2024 07:49:42 +0000
Subject: [PATCH 1/3] [Flang][Parser] Set source information for the atomic
constructs
---
flang/lib/Parser/openmp-parsers.cpp | 33 ++++++++++++++++-------------
1 file changed, 18 insertions(+), 15 deletions(-)
diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp
index 52789d6e5f0f6b..04f78aa614005e 100644
--- a/flang/lib/Parser/openmp-parsers.cpp
+++ b/flang/lib/Parser/openmp-parsers.cpp
@@ -566,33 +566,36 @@ TYPE_PARSER(construct<OmpEndAtomic>(startOmpLine >> "END ATOMIC"_tok))
// OMP ATOMIC [MEMORY-ORDER-CLAUSE-LIST] READ [MEMORY-ORDER-CLAUSE-LIST]
TYPE_PARSER("ATOMIC" >>
- construct<OmpAtomicRead>(Parser<OmpAtomicClauseList>{} / maybe(","_tok),
- verbatim("READ"_tok), Parser<OmpAtomicClauseList>{} / endOmpLine,
- statement(assignmentStmt), maybe(Parser<OmpEndAtomic>{} / endOmpLine)))
+ sourced(construct<OmpAtomicRead>(
+ Parser<OmpAtomicClauseList>{} / maybe(","_tok), verbatim("READ"_tok),
+ Parser<OmpAtomicClauseList>{} / endOmpLine, statement(assignmentStmt),
+ maybe(Parser<OmpEndAtomic>{} / endOmpLine))))
// OMP ATOMIC [MEMORY-ORDER-CLAUSE-LIST] CAPTURE [MEMORY-ORDER-CLAUSE-LIST]
TYPE_PARSER("ATOMIC" >>
- construct<OmpAtomicCapture>(Parser<OmpAtomicClauseList>{} / maybe(","_tok),
- verbatim("CAPTURE"_tok), Parser<OmpAtomicClauseList>{} / endOmpLine,
- statement(assignmentStmt), statement(assignmentStmt),
- Parser<OmpEndAtomic>{} / endOmpLine))
+ sourced(construct<OmpAtomicCapture>(
+ Parser<OmpAtomicClauseList>{} / maybe(","_tok), verbatim("CAPTURE"_tok),
+ Parser<OmpAtomicClauseList>{} / endOmpLine, statement(assignmentStmt),
+ statement(assignmentStmt), Parser<OmpEndAtomic>{} / endOmpLine)))
// OMP ATOMIC [MEMORY-ORDER-CLAUSE-LIST] UPDATE [MEMORY-ORDER-CLAUSE-LIST]
TYPE_PARSER("ATOMIC" >>
- construct<OmpAtomicUpdate>(Parser<OmpAtomicClauseList>{} / maybe(","_tok),
- verbatim("UPDATE"_tok), Parser<OmpAtomicClauseList>{} / endOmpLine,
- statement(assignmentStmt), maybe(Parser<OmpEndAtomic>{} / endOmpLine)))
+ sourced(construct<OmpAtomicUpdate>(
+ Parser<OmpAtomicClauseList>{} / maybe(","_tok), verbatim("UPDATE"_tok),
+ Parser<OmpAtomicClauseList>{} / endOmpLine, statement(assignmentStmt),
+ maybe(Parser<OmpEndAtomic>{} / endOmpLine))))
// OMP ATOMIC [atomic-clause-list]
-TYPE_PARSER(construct<OmpAtomic>(verbatim("ATOMIC"_tok),
+TYPE_PARSER(sourced(construct<OmpAtomic>(verbatim("ATOMIC"_tok),
Parser<OmpAtomicClauseList>{} / endOmpLine, statement(assignmentStmt),
- maybe(Parser<OmpEndAtomic>{} / endOmpLine)))
+ maybe(Parser<OmpEndAtomic>{} / endOmpLine))))
// OMP ATOMIC [MEMORY-ORDER-CLAUSE-LIST] WRITE [MEMORY-ORDER-CLAUSE-LIST]
TYPE_PARSER("ATOMIC" >>
- construct<OmpAtomicWrite>(Parser<OmpAtomicClauseList>{} / maybe(","_tok),
- verbatim("WRITE"_tok), Parser<OmpAtomicClauseList>{} / endOmpLine,
- statement(assignmentStmt), maybe(Parser<OmpEndAtomic>{} / endOmpLine)))
+ sourced(construct<OmpAtomicWrite>(
+ Parser<OmpAtomicClauseList>{} / maybe(","_tok), verbatim("WRITE"_tok),
+ Parser<OmpAtomicClauseList>{} / endOmpLine, statement(assignmentStmt),
+ maybe(Parser<OmpEndAtomic>{} / endOmpLine))))
// Atomic Construct
TYPE_PARSER(construct<OpenMPAtomicConstruct>(Parser<OmpAtomicRead>{}) ||
>From 7cfcf188364105361e0bdc8ccb18247eeaa9b284 Mon Sep 17 00:00:00 2001
From: Thirumalai-Shaktivel <thirumalaishaktivel at gmail.com>
Date: Wed, 18 Sep 2024 07:50:03 +0000
Subject: [PATCH 2/3] [Flang][Semantics] Add source range information
---
flang/lib/Semantics/resolve-names.cpp | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index b99f308e1c7fab..fd31553fff59ae 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -1505,6 +1505,23 @@ class OmpVisitor : public virtual DeclarationVisitor {
void Post(const parser::OmpEndCriticalDirective &) {
messageHandler().set_currStmtSource(std::nullopt);
}
+ bool Pre(const parser::OpenMPDeclarativeConstruct &x) {
+ AddOmpSourceRange(x.source);
+ return true;
+ }
+ void Post(const parser::OpenMPDeclarativeConstruct &) {
+ messageHandler().set_currStmtSource(std::nullopt);
+ }
+ bool Pre(const parser::OpenMPAtomicConstruct &x) {
+ return common::visit(common::visitors{[&](const auto &u) -> bool {
+ AddOmpSourceRange(u.source);
+ return true;
+ }},
+ x.u);
+ }
+ void Post(const parser::OpenMPAtomicConstruct &) {
+ messageHandler().set_currStmtSource(std::nullopt);
+ }
};
bool OmpVisitor::NeedsScope(const parser::OpenMPBlockConstruct &x) {
>From e54abd528d93180cae4d7ff6c1d9f0e5d182fd09 Mon Sep 17 00:00:00 2001
From: Thirumalai-Shaktivel <thirumalaishaktivel at gmail.com>
Date: Wed, 18 Sep 2024 07:50:16 +0000
Subject: [PATCH 3/3] [Test] Add tests
---
flang/test/Semantics/OpenMP/atomic06-empty.f90 | 6 ++++++
flang/test/Semantics/OpenMP/declare-simd-empty.f90 | 6 ++++++
flang/test/Semantics/OpenMP/threadprivate08-empty.f90 | 5 +++++
3 files changed, 17 insertions(+)
create mode 100644 flang/test/Semantics/OpenMP/atomic06-empty.f90
create mode 100644 flang/test/Semantics/OpenMP/declare-simd-empty.f90
create mode 100644 flang/test/Semantics/OpenMP/threadprivate08-empty.f90
diff --git a/flang/test/Semantics/OpenMP/atomic06-empty.f90 b/flang/test/Semantics/OpenMP/atomic06-empty.f90
new file mode 100644
index 00000000000000..226e8d1bb91a5b
--- /dev/null
+++ b/flang/test/Semantics/OpenMP/atomic06-empty.f90
@@ -0,0 +1,6 @@
+! RUN: %python %S/../test_errors.py %s %flang -fopenmp
+! Test the source code starting with omp syntax
+
+!$omp atomic write
+i = 123
+end
diff --git a/flang/test/Semantics/OpenMP/declare-simd-empty.f90 b/flang/test/Semantics/OpenMP/declare-simd-empty.f90
new file mode 100644
index 00000000000000..b61fb53730a23d
--- /dev/null
+++ b/flang/test/Semantics/OpenMP/declare-simd-empty.f90
@@ -0,0 +1,6 @@
+! RUN: %python %S/../test_errors.py %s %flang -fopenmp
+! Test the source code starting with omp syntax
+
+!$omp declare simd
+integer :: x
+end
diff --git a/flang/test/Semantics/OpenMP/threadprivate08-empty.f90 b/flang/test/Semantics/OpenMP/threadprivate08-empty.f90
new file mode 100644
index 00000000000000..38a855dceb8366
--- /dev/null
+++ b/flang/test/Semantics/OpenMP/threadprivate08-empty.f90
@@ -0,0 +1,5 @@
+! RUN: %python %S/../test_errors.py %s %flang -fopenmp
+! Test the source code starting with omp syntax
+
+!$omp threadprivate(a)
+end
More information about the flang-commits
mailing list