================ @@ -431,6 +431,122 @@ AST_MATCHER(CXXConstructExpr, isSafeSpanTwoParamConstruct) { return false; } +class MaxValueEval : public ConstStmtVisitor<MaxValueEval, llvm::APInt> { + + ASTContext &Context; + llvm::APInt Max; + unsigned bit_width; + +public: + typedef ConstStmtVisitor<MaxValueEval, llvm::APInt> VisitorBase; + + explicit MaxValueEval(ASTContext &Ctx, const Expr *exp) : Context(Ctx) { + bit_width = Ctx.getIntWidth(exp->getType()); + Max = llvm::APInt::getSignedMaxValue(bit_width); + // val.clear(); + } + + llvm::APInt findMatch(Expr *exp) { return TraverseStmt(exp); } + + llvm::APInt TraverseStmt(Stmt *S) { + if (Expr *E = dyn_cast<Expr>(S)) { + Expr::EvalResult EVResult; + if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) { ---------------- ziqingluo-90 wrote:
nit: we could do a `switch` on `E->getStmtClass()` here, which is more efficient than a list of if-else. https://github.com/llvm/llvm-project/pull/112284 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits