[clang] [OpenMP] Fix atomic compare handling with overloaded operators (PR #141142)
Joseph Huber via cfe-commits
cfe-commits at lists.llvm.org
Wed May 28 13:17:01 PDT 2025
================
@@ -12062,32 +12154,56 @@ bool OpenMPAtomicCompareCaptureChecker::checkForm3(IfStmt *S,
X = BO->getLHS();
D = BO->getRHS();
- auto *Cond = dyn_cast<BinaryOperator>(S->getCond());
- if (!Cond) {
+ if (auto *Cond = dyn_cast<BinaryOperator>(S->getCond())) {
+ C = Cond;
+ if (Cond->getOpcode() != BO_EQ) {
+ ErrorInfo.Error = ErrorTy::NotEQ;
+ ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = Cond->getExprLoc();
+ ErrorInfo.ErrorRange = ErrorInfo.NoteRange = Cond->getSourceRange();
+ return false;
+ }
+
+ if (checkIfTwoExprsAreSame(ContextRef, X, Cond->getLHS())) {
+ E = Cond->getRHS();
+ } else if (checkIfTwoExprsAreSame(ContextRef, X, Cond->getRHS())) {
+ E = Cond->getLHS();
+ } else {
+ ErrorInfo.Error = ErrorTy::InvalidComparison;
+ ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = Cond->getExprLoc();
+ ErrorInfo.ErrorRange = ErrorInfo.NoteRange = Cond->getSourceRange();
+ return false;
+ }
+ } else if (auto *Call = dyn_cast<CXXOperatorCallExpr>(S->getCond())) {
+ C = Call;
+ if (Call->getNumArgs() != 2) {
+ ErrorInfo.Error = ErrorTy::InvalidBinaryOp;
+ ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = Call->getExprLoc();
+ ErrorInfo.ErrorRange = ErrorInfo.NoteRange = Call->getSourceRange();
+ return false;
+ }
+ if (Call->getOperator() != clang::OverloadedOperatorKind::OO_EqualEqual) {
+ ErrorInfo.Error = ErrorTy::NotEQ;
+ ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = Call->getExprLoc();
+ ErrorInfo.ErrorRange = ErrorInfo.NoteRange = Call->getSourceRange();
+ return false;
+ }
+
+ if (checkIfTwoExprsAreSame(ContextRef, X, Call->getArg(0))) {
+ E = Call->getArg(1);
+ } else if (checkIfTwoExprsAreSame(ContextRef, X, Call->getArg(1))) {
+ E = Call->getArg(0);
+ } else {
+ ErrorInfo.Error = ErrorTy::InvalidComparison;
+ ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = Call->getExprLoc();
+ ErrorInfo.ErrorRange = ErrorInfo.NoteRange = Call->getSourceRange();
+ return false;
+ }
----------------
jhuber6 wrote:
Done
https://github.com/llvm/llvm-project/pull/141142
More information about the cfe-commits
mailing list