diff --git a/compiler/noirc_evaluator/src/acir/mod.rs b/compiler/noirc_evaluator/src/acir/mod.rs index aabba277f96..749f3e078c6 100644 --- a/compiler/noirc_evaluator/src/acir/mod.rs +++ b/compiler/noirc_evaluator/src/acir/mod.rs @@ -1392,22 +1392,21 @@ impl<'a> Context<'a> { // Get operations to call-data parameters are replaced by a get to the call-data-bus array let call_data = self.data_bus.call_data.iter().find(|cd| cd.index_map.contains_key(&array)).cloned(); - if let Some(call_data) = call_data { + let mut value = if let Some(call_data) = call_data { let call_data_block = self.ensure_array_is_initialized(call_data.array_id, dfg)?; let bus_index = self .acir_context .add_constant(FieldElement::from(call_data.index_map[&array] as i128)); let mut current_index = self.acir_context.add_var(bus_index, var_index)?; - let result = self.get_from_call_data(&mut current_index, call_data_block, &res_typ)?; - self.define_result(dfg, instruction, result.clone()); - return Ok(result); - } - // Compiler sanity check - assert!( - !res_typ.contains_slice_element(), - "ICE: Nested slice result found during ACIR generation" - ); - let mut value = self.array_get_value(&res_typ, block_id, &mut var_index)?; + self.get_from_call_data(&mut current_index, call_data_block, &res_typ)? + } else { + // Compiler sanity check + assert!( + !res_typ.contains_slice_element(), + "ICE: Nested slice result found during ACIR generation" + ); + self.array_get_value(&res_typ, block_id, &mut var_index)? + }; if let AcirValue::Var(value_var, typ) = &value { let array_typ = dfg.type_of_value(array); diff --git a/test_programs/execution_success/regression_7612/Nargo.toml b/test_programs/execution_success/regression_7612/Nargo.toml new file mode 100644 index 00000000000..f79a13d855d --- /dev/null +++ b/test_programs/execution_success/regression_7612/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "regression_7612" +type = "bin" +authors = [""] + +[dependencies] diff --git a/test_programs/execution_success/regression_7612/Prover.toml b/test_programs/execution_success/regression_7612/Prover.toml new file mode 100644 index 00000000000..6bb6972e3d6 --- /dev/null +++ b/test_programs/execution_success/regression_7612/Prover.toml @@ -0,0 +1,2 @@ +array = [{ counter = 8, fields = ["0x200000000"] }] +x = true \ No newline at end of file diff --git a/test_programs/execution_success/regression_7612/src/main.nr b/test_programs/execution_success/regression_7612/src/main.nr new file mode 100644 index 00000000000..c97473cda3b --- /dev/null +++ b/test_programs/execution_success/regression_7612/src/main.nr @@ -0,0 +1,11 @@ +pub struct Data { + fields: [Field; 1], + counter: u32, +} + +fn main(array: call_data(0) [Data; 1], x: bool) { + let index = if x { 0 } else { 1 }; + if index != 0 { + assert(array[index - 1].counter < 3); + } +}