Skip to content

Commit

Permalink
fix: fix an ICE happening when we call a closure result from if/else (#…
Browse files Browse the repository at this point in the history
…2146)

* fix: fix an ICE happening when we call a closure result from if/else

* refactor: moved test to a regression fn, cleanup code
  • Loading branch information
alehander92 authored Aug 4, 2023
1 parent 295d82e commit 928b3ad
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ fn main() -> pub Field {
x += 1;
assert(closure_capturing_mutable(1) == 5);

regression_2154();

let ret = twice(add1, 3);

test_array_functions();
Expand Down Expand Up @@ -85,3 +87,21 @@ fn add1(x: Field) -> Field {
fn twice(f: fn(Field) -> Field, x: Field) -> Field {
f(f(x))
}

// Fixing an ICE, where rewriting the closures
// during monomorphization didn't correspond
// to an internal `if` type
// found by @jfecher:
// https://github.com/noir-lang/noir/pull/1959#issuecomment-1658992989
// issue https://github.com/noir-lang/noir/issues/2154
fn regression_2154() {
let x: u32 = 32;

let closure_if_else = if x > 2 {
|| x
} else {
|| x + 2342
};

assert(closure_if_else() == 32);
}
15 changes: 13 additions & 2 deletions crates/noirc_frontend/src/monomorphization/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -689,8 +689,19 @@ impl<'interner> Monomorphizer<'interner> {
HirType::Function(args, ret, env) => {
let args = vecmap(args, Self::convert_type);
let ret = Box::new(Self::convert_type(ret));
let env = Box::new(Self::convert_type(env));
ast::Type::Function(args, ret, env)
let env = Self::convert_type(env);
match &env {
ast::Type::Unit => ast::Type::Function(args, ret, Box::new(env)),
ast::Type::Tuple(_elements) => ast::Type::Tuple(vec![
env.clone(),
ast::Type::Function(args, ret, Box::new(env)),
]),
_ => {
unreachable!(
"internal Type::Function env should be either a Unit or a Tuple, not {env}"
)
}
}
}

HirType::MutableReference(element) => {
Expand Down

0 comments on commit 928b3ad

Please sign in to comment.