================ @@ -14043,28 +14039,61 @@ static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, return true; } +namespace { +struct AnalyzeImplicitConversionsWorkItem { + Expr *E; + SourceLocation CC; + unsigned IsListInit : 1; + unsigned IsTopLevelExpr : 1; +}; + +class ImplicitConversionChecker { + Sema &S; + Expr *TopLevelExpr; + + void AnalyzeCompoundAssignment(BinaryOperator *E); + void AnalyzeImplicitConversions( + AnalyzeImplicitConversionsWorkItem Item, + llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList); + void AnalyzeImpConvsInComparison(BinaryOperator *E); + void AnalyzeComparison(BinaryOperator *E); + void AnalyzeAssignment(BinaryOperator *E); + void CheckConditionalOperand(Expr *E, QualType T, SourceLocation CC, + bool &ICContext); + void CheckConditionalOperator(AbstractConditionalOperator *E, + SourceLocation CC, QualType T); + +public: + ImplicitConversionChecker(Sema &S) : S(S), TopLevelExpr(nullptr) {} + + void AnalyzeImplicitConversions(Expr *E, SourceLocation CC, + bool IsInitList = false, + bool IsTopLevelExpr = false); +}; +} // namespace + /// Analyze the operands of the given comparison. Implements the /// fallback case from AnalyzeComparison. -static void AnalyzeImpConvsInComparison(Sema &S, BinaryOperator *E) { - AnalyzeImplicitConversions(S, E->getLHS(), E->getOperatorLoc()); - AnalyzeImplicitConversions(S, E->getRHS(), E->getOperatorLoc()); +void ImplicitConversionChecker::AnalyzeImpConvsInComparison(BinaryOperator *E) { + AnalyzeImplicitConversions(E->getLHS(), E->getOperatorLoc(), false, false); + AnalyzeImplicitConversions(E->getRHS(), E->getOperatorLoc(), false, false); ---------------- shafik wrote:
```suggestion AnalyzeImplicitConversions(E->getLHS(), E->getOperatorLoc(), /*IsInitList=*/false, /*IsTopLevelExpr=*/false); AnalyzeImplicitConversions(E->getRHS(), E->getOperatorLoc(), /*IsInitList=*/false, /*IsTopLevelExpr=*/false); ``` https://github.com/llvm/llvm-project/pull/65684 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits