diff options
author | NAKAMURA Takumi <geek4civic@gmail.com> | 2025-01-09 18:43:11 +0900 |
---|---|---|
committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2025-01-09 18:43:11 +0900 |
commit | 0e1a753549b29ff1f5a190aca83b803a33b51628 (patch) | |
tree | e5578f8810c65711304128d0c8add7fa1f77b9d8 /flang/lib/Semantics/assignment.cpp | |
parent | 3c6252260ee11e3a453076b4d96ffffe20d49998 (diff) | |
parent | bdcf47e4bcb92889665825654bb80a8bbe30379e (diff) | |
download | llvm-users/chapuni/cov/single/if.zip llvm-users/chapuni/cov/single/if.tar.gz llvm-users/chapuni/cov/single/if.tar.bz2 |
Merge branch 'users/chapuni/cov/single/base' into users/chapuni/cov/single/ifusers/chapuni/cov/single/if
Conflicts:
clang/lib/CodeGen/CoverageMappingGen.cpp
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) { |