diff --git a/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs b/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs index 4a513c7b804..10d58f327e5 100644 --- a/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs +++ b/compiler/noirc_evaluator/src/ssa/acir_gen/mod.rs @@ -327,13 +327,9 @@ impl Ssa { bytecode: brillig.byte_code, }); - // TODO: check whether doing this for a single circuit's return witnesses is correct. - // We probably need it for all foldable circuits, as any circuit being folded is essentially an entry point. However, I do not know how that - // plays a part when we potentially want not inlined functions normally as part of the compiler. - // Also at the moment we specify Distinctness as part of the ABI exclusively rather than the function itself - // so this will need to be updated. - let main_func_acir = &mut acirs[0]; - generate_distinct_return_witnesses(main_func_acir); + for acir in acirs.iter_mut() { + generate_distinct_return_witnesses(acir); + } Ok((acirs, brillig)) } @@ -2664,9 +2660,9 @@ mod test { #[test] #[should_panic] fn basic_calls_no_predicates() { + basic_call_with_outputs_assert(InlineType::NoPredicates); call_output_as_next_call_input(InlineType::NoPredicates); basic_nested_call(InlineType::NoPredicates); - basic_call_with_outputs_assert(InlineType::NoPredicates); } #[test] @@ -2909,9 +2905,10 @@ mod test { let func_with_nested_call_acir = &acir_functions[1]; let func_with_nested_call_opcodes = func_with_nested_call_acir.opcodes(); + assert_eq!( func_with_nested_call_opcodes.len(), - 2, + 3, "Should have an expression and a call to a nested `foo`" ); // Should call foo f2 diff --git a/test_programs/execution_success/fold_distinct_return/Nargo.toml b/test_programs/execution_success/fold_distinct_return/Nargo.toml new file mode 100644 index 00000000000..f18edb7e49d --- /dev/null +++ b/test_programs/execution_success/fold_distinct_return/Nargo.toml @@ -0,0 +1,7 @@ +[package] +name = "fold_distinct_return" +type = "bin" +authors = [""] +compiler_version = ">=0.28.0" + +[dependencies] \ No newline at end of file diff --git a/test_programs/execution_success/fold_distinct_return/Prover.toml b/test_programs/execution_success/fold_distinct_return/Prover.toml new file mode 100644 index 00000000000..f28f2f8cc48 --- /dev/null +++ b/test_programs/execution_success/fold_distinct_return/Prover.toml @@ -0,0 +1,2 @@ +x = "5" +y = "10" diff --git a/test_programs/execution_success/fold_distinct_return/src/main.nr b/test_programs/execution_success/fold_distinct_return/src/main.nr new file mode 100644 index 00000000000..b0843a02b80 --- /dev/null +++ b/test_programs/execution_success/fold_distinct_return/src/main.nr @@ -0,0 +1,10 @@ +fn main(x: u32, y: pub u32) { + let new_field = new_field_in_array([x, y, 3]); + assert(new_field[0] == 25); +} + +#[fold] +fn new_field_in_array(mut input: [u32; 3]) -> [u32; 3] { + input[0] = input[0] + 20; + input +} diff --git a/tooling/debugger/ignored-tests.txt b/tooling/debugger/ignored-tests.txt index eaeea488f3a..cbef395e65c 100644 --- a/tooling/debugger/ignored-tests.txt +++ b/tooling/debugger/ignored-tests.txt @@ -20,4 +20,5 @@ fold_numeric_generic_poseidon no_predicates_basic no_predicates_numeric_generic_poseidon regression_4709 +fold_distinct_return fold_fibonacci