Hi, In lib/Expr/Constraints.cpp I notice
class ExprReplaceVisitor : public ExprVisitor { public: Action visitExpr(const Expr &e) override { if (e == *src) { return Action::changeTo(dst); } return Action::doChildren(); } Action visitExprPost(const Expr &e) override { if (e == *src) { return Action::changeTo(dst); } return Action::doChildren(); } }; while ExprReplaceVisitor2 : ExprVisitor only overrides visitExprPost. Why does ExprReplaceVisitor have the duplicated code there? Following ExprVisitor::visitActual, switch (visitExpr(e)) { case Action::ChangeTo: return [replacement expr]; case Action::DoChildren: if (!isa<ConstantExpr>(e)) if (visitExprPost(*e.get()) == Action::ChangeTo) return [replacement expr post]; return e; } it seems to me overriding visitExprPost is unnecessary for replacing an expression. Is my analisys correct and if not, what did I miss? Kind regards, Phong _______________________________________________ klee-dev mailing list klee-dev@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/klee-dev