[flang-commits] [flang] eb6cd7f - [flang] ERROR STOP is not an image control statement
Peter Klausler via flang-commits
flang-commits at lists.llvm.org
Wed Jun 15 14:39:42 PDT 2022
Author: Peter Klausler
Date: 2022-06-15T14:39:31-07:00
New Revision: eb6cd7fe316ca68ed8c0fbad60008d68392221f6
URL: https://github.com/llvm/llvm-project/commit/eb6cd7fe316ca68ed8c0fbad60008d68392221f6
DIFF: https://github.com/llvm/llvm-project/commit/eb6cd7fe316ca68ed8c0fbad60008d68392221f6.diff
LOG: [flang] ERROR STOP is not an image control statement
The predicate that determines image control statements needs
to distinguish STOP (which is) from ERROR STOP (which isn't).
Differential Revision: https://reviews.llvm.org/D127796
Added:
Modified:
flang/lib/Semantics/tools.cpp
Removed:
################################################################################
diff --git a/flang/lib/Semantics/tools.cpp b/flang/lib/Semantics/tools.cpp
index 848bf2dca32a..67016693716b 100644
--- a/flang/lib/Semantics/tools.cpp
+++ b/flang/lib/Semantics/tools.cpp
@@ -875,11 +875,11 @@ std::optional<parser::Message> WhyNotModifiable(parser::CharBlock at,
}
class ImageControlStmtHelper {
- using ImageControlStmts = std::variant<parser::ChangeTeamConstruct,
- parser::CriticalConstruct, parser::EventPostStmt, parser::EventWaitStmt,
- parser::FormTeamStmt, parser::LockStmt, parser::StopStmt,
- parser::SyncAllStmt, parser::SyncImagesStmt, parser::SyncMemoryStmt,
- parser::SyncTeamStmt, parser::UnlockStmt>;
+ using ImageControlStmts =
+ std::variant<parser::ChangeTeamConstruct, parser::CriticalConstruct,
+ parser::EventPostStmt, parser::EventWaitStmt, parser::FormTeamStmt,
+ parser::LockStmt, parser::SyncAllStmt, parser::SyncImagesStmt,
+ parser::SyncMemoryStmt, parser::SyncTeamStmt, parser::UnlockStmt>;
public:
template <typename T> bool operator()(const T &) {
@@ -929,6 +929,11 @@ class ImageControlStmtHelper {
}
return false;
}
+ bool operator()(const parser::StopStmt &stmt) {
+ // STOP is an image control statement; ERROR STOP is not
+ return std::get<parser::StopStmt::Kind>(stmt.t) ==
+ parser::StopStmt::Kind::Stop;
+ }
bool operator()(const parser::Statement<parser::ActionStmt> &stmt) {
return common::visit(*this, stmt.statement.u);
}
More information about the flang-commits
mailing list