================ @@ -11762,52 +11762,98 @@ bool OpenMPAtomicCompareChecker::checkCondUpdateStmt(IfStmt *S, X = BO->getLHS(); - auto *Cond = dyn_cast<BinaryOperator>(S->getCond()); - if (!Cond) { - ErrorInfo.Error = ErrorTy::NotABinaryOp; - ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = S->getCond()->getExprLoc(); - ErrorInfo.ErrorRange = ErrorInfo.NoteRange = S->getCond()->getSourceRange(); - return false; - } - - switch (Cond->getOpcode()) { - case BO_EQ: { - C = Cond; - D = BO->getRHS(); - if (checkIfTwoExprsAreSame(ContextRef, X, Cond->getLHS())) { - E = Cond->getRHS(); - } else if (checkIfTwoExprsAreSame(ContextRef, X, Cond->getRHS())) { - E = Cond->getLHS(); - } else { - ErrorInfo.Error = ErrorTy::InvalidComparison; + if (auto *Cond = dyn_cast<BinaryOperator>(S->getCond())) { + switch (Cond->getOpcode()) { + case BO_EQ: { + C = Cond; + D = BO->getRHS(); + 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; + } + break; + } + case BO_LT: + case BO_GT: { + E = BO->getRHS(); + if (checkIfTwoExprsAreSame(ContextRef, X, Cond->getLHS()) && + checkIfTwoExprsAreSame(ContextRef, E, Cond->getRHS())) { + C = Cond; + } else if (checkIfTwoExprsAreSame(ContextRef, E, Cond->getLHS()) && + checkIfTwoExprsAreSame(ContextRef, X, Cond->getRHS())) { + C = Cond; + IsXBinopExpr = false; + } else { + ErrorInfo.Error = ErrorTy::InvalidComparison; + ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = Cond->getExprLoc(); + ErrorInfo.ErrorRange = ErrorInfo.NoteRange = Cond->getSourceRange(); + return false; + } + break; + } + default: + ErrorInfo.Error = ErrorTy::InvalidBinaryOp; ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = Cond->getExprLoc(); ErrorInfo.ErrorRange = ErrorInfo.NoteRange = Cond->getSourceRange(); return false; } - break; - } - case BO_LT: - case BO_GT: { - E = BO->getRHS(); - if (checkIfTwoExprsAreSame(ContextRef, X, Cond->getLHS()) && - checkIfTwoExprsAreSame(ContextRef, E, Cond->getRHS())) { - C = Cond; - } else if (checkIfTwoExprsAreSame(ContextRef, E, Cond->getLHS()) && - checkIfTwoExprsAreSame(ContextRef, X, Cond->getRHS())) { - C = Cond; - IsXBinopExpr = false; - } else { - ErrorInfo.Error = ErrorTy::InvalidComparison; - ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = Cond->getExprLoc(); - ErrorInfo.ErrorRange = ErrorInfo.NoteRange = Cond->getSourceRange(); + } else if (auto *Call = dyn_cast<CXXOperatorCallExpr>(S->getCond())) { ---------------- shiltian wrote:
I don't think we should support this. We can't reliably lower non-trivial type at the moment. https://github.com/llvm/llvm-project/pull/141142 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits