diff options
author | NAKAMURA Takumi <geek4civic@gmail.com> | 2025-01-09 18:15:55 +0900 |
---|---|---|
committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2025-01-09 18:15:55 +0900 |
commit | bdcf47e4bcb92889665825654bb80a8bbe30379e (patch) | |
tree | 4de1d6b4ddc69f4f32daabb11ad5c71ab0cf895e /flang/lib/Semantics/assignment.cpp | |
parent | e7fd5cd25334048980ea207a9eff72698724721a (diff) | |
parent | fea7da1b00cc97d742faede2df96c7d327950f49 (diff) | |
download | llvm-users/chapuni/cov/single/base.zip llvm-users/chapuni/cov/single/base.tar.gz llvm-users/chapuni/cov/single/base.tar.bz2 |
Merge branch 'users/chapuni/cov/single/nextcount' into users/chapuni/cov/single/baseusers/chapuni/cov/single/base
Diffstat (limited to 'flang/lib/Semantics/assignment.cpp')
-rw-r--r-- | flang/lib/Semantics/assignment.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/flang/lib/Semantics/assignment.cpp b/flang/lib/Semantics/assignment.cpp index e69a73c..0b57197 100644 --- a/flang/lib/Semantics/assignment.cpp +++ b/flang/lib/Semantics/assignment.cpp @@ -66,8 +66,13 @@ void AssignmentContext::Analyze(const parser::AssignmentStmt &stmt) { const SomeExpr &rhs{assignment->rhs}; auto lhsLoc{std::get<parser::Variable>(stmt.t).GetSource()}; const Scope &scope{context_.FindScope(lhsLoc)}; - if (auto whyNot{WhyNotDefinable(lhsLoc, scope, - DefinabilityFlags{DefinabilityFlag::VectorSubscriptIsOk}, lhs)}) { + DefinabilityFlags flags{DefinabilityFlag::VectorSubscriptIsOk}; + bool isDefinedAssignment{ + std::holds_alternative<evaluate::ProcedureRef>(assignment->u)}; + if (isDefinedAssignment) { + flags.set(DefinabilityFlag::AllowEventLockOrNotifyType); + } + if (auto whyNot{WhyNotDefinable(lhsLoc, scope, flags, lhs)}) { if (whyNot->IsFatal()) { if (auto *msg{Say(lhsLoc, "Left-hand side of assignment is not definable"_err_en_US)}) { @@ -79,9 +84,7 @@ void AssignmentContext::Analyze(const parser::AssignmentStmt &stmt) { } } auto rhsLoc{std::get<parser::Expr>(stmt.t).source}; - if (std::holds_alternative<evaluate::ProcedureRef>(assignment->u)) { - // it's a defined ASSIGNMENT(=) - } else { + if (!isDefinedAssignment) { CheckForPureContext(rhs, rhsLoc); } if (whereDepth_ > 0) { |