================ @@ -1390,17 +1577,82 @@ NormalizedConstraint::fromConstraintExpr(Sema &S, NamedDecl *D, const Expr *E) { return std::nullopt; return New; + } else if (auto *FE = dyn_cast<const CXXFoldExpr>(E); + FE && S.getLangOpts().CPlusPlus26 && + (FE->getOperator() == BinaryOperatorKind::BO_LAnd || + FE->getOperator() == BinaryOperatorKind::BO_LOr)) { + + FoldExpandedConstraint::FoldOperatorKind Kind = + FE->getOperator() == BinaryOperatorKind::BO_LAnd + ? FoldExpandedConstraint::FoldOperatorKind::FoAnd + : FoldExpandedConstraint::FoldOperatorKind::FoOr; + + if (FE->getInit()) { + auto LHS = fromConstraintExpr(S, D, FE->getLHS()); + auto RHS = fromConstraintExpr(S, D, FE->getRHS()); + if (!LHS || !RHS) + return std::nullopt; + + if (FE->isRightFold()) + RHS = NormalizedConstraint{new (S.Context) FoldExpandedConstraint{ + Kind, std::move(*RHS), FE->getPattern()}}; + else + LHS = NormalizedConstraint{new (S.Context) FoldExpandedConstraint{ + Kind, std::move(*LHS), FE->getPattern()}}; + + return NormalizedConstraint( + S.Context, std::move(*LHS), std::move(*RHS), + FE->getOperator() == BinaryOperatorKind::BO_LAnd ? CCK_Conjunction + : CCK_Disjunction); + } + auto Sub = fromConstraintExpr(S, D, FE->getPattern()); + return NormalizedConstraint{new (S.Context) FoldExpandedConstraint{ + Kind, std::move(*Sub), FE->getPattern()}}; } + return NormalizedConstraint{new (S.Context) AtomicConstraint(S, E)}; } -using NormalForm = - llvm::SmallVector<llvm::SmallVector<AtomicConstraint *, 2>, 4>; +/*static void CollectConstraintParams(const AtomicConstraint& C, ---------------- AaronBallman wrote:
Dead code? https://github.com/llvm/llvm-project/pull/98160 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits