Skip to content

Commit

Permalink
Check if variable in imm after encoding (#971)
Browse files Browse the repository at this point in the history
  • Loading branch information
nilehmann authored Jan 14, 2025
1 parent 5f3c207 commit d306a87
Showing 1 changed file with 14 additions and 15 deletions.
29 changes: 14 additions & 15 deletions crates/flux-infer/src/fixpoint_encoding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1224,21 +1224,20 @@ impl<'genv, 'tcx> ExprEncodingCtxt<'genv, 'tcx> {
scx: &mut SortEncodingCtxt,
bindings: &mut Vec<fixpoint::Bind>,
) -> QueryResult<fixpoint::Var> {
match arg.kind() {
rty::ExprKind::Var(var) => Ok(self.var_to_fixpoint(var)),
_ => {
let fresh = self.local_var_env.fresh_name();
let pred = fixpoint::Expr::eq(
fixpoint::Expr::Var(fresh.into()),
self.expr_to_fixpoint(arg, scx)?,
);
bindings.push(fixpoint::Bind {
name: fresh.into(),
sort: scx.sort_to_fixpoint(sort),
pred: fixpoint::Pred::Expr(pred),
});
Ok(fresh.into())
}
let arg = self.expr_to_fixpoint(arg, scx)?;
// Check if it's a variable after encoding, in case the encoding produced a variable from a
// non-variable.
if let fixpoint::Expr::Var(var) = arg {
Ok(var)
} else {
let fresh = self.local_var_env.fresh_name();
let pred = fixpoint::Expr::eq(fixpoint::Expr::Var(fresh.into()), arg);
bindings.push(fixpoint::Bind {
name: fresh.into(),
sort: scx.sort_to_fixpoint(sort),
pred: fixpoint::Pred::Expr(pred),
});
Ok(fresh.into())
}
}

Expand Down

0 comments on commit d306a87

Please sign in to comment.