diff --git a/compiler/noirc_printable_type/src/lib.rs b/compiler/noirc_printable_type/src/lib.rs index 45d8926fd83..348f5ef3274 100644 --- a/compiler/noirc_printable_type/src/lib.rs +++ b/compiler/noirc_printable_type/src/lib.rs @@ -131,12 +131,23 @@ fn convert_fmt_string_inputs( { let printable_type = fetch_printable_type(printable_value)?; let type_size = printable_type.field_count() as usize; - - let mut input_values_as_fields = input_and_printable_values[i..(i + type_size)] - .iter() - .flat_map(|param| vecmap(param.values(), |value| value.to_field())); - - let value = decode_value(&mut input_values_as_fields, &printable_type); + let value = match printable_type { + PrintableType::Array { .. } | PrintableType::String { .. } => { + // Arrays and strings are represented in a single value vector rather than multiple separate input values + let mut input_values_as_fields = input_and_printable_values[i] + .values() + .into_iter() + .map(|value| value.to_field()); + decode_value(&mut input_values_as_fields, &printable_type) + } + _ => { + // We must use a flat map here as each value in a struct will be in a separate input value + let mut input_values_as_fields = input_and_printable_values[i..(i + type_size)] + .iter() + .flat_map(|param| vecmap(param.values(), |value| value.to_field())); + decode_value(&mut input_values_as_fields, &printable_type) + } + }; output.push((value, printable_type)); } diff --git a/tooling/nargo_cli/tests/execution_success/debug_logs/src/main.nr b/tooling/nargo_cli/tests/execution_success/debug_logs/src/main.nr index c8d37a938c7..f17e20fac3d 100644 --- a/tooling/nargo_cli/tests/execution_success/debug_logs/src/main.nr +++ b/tooling/nargo_cli/tests/execution_success/debug_logs/src/main.nr @@ -39,6 +39,8 @@ fn main(x : Field, y : pub Field) { let struct_string = if x != 5 { f"{foo}" } else { f"{bar}" }; std::println(struct_string); + + regression_2906(); } fn string_identity(string: fmtstr<14, (Field, Field)>) -> fmtstr<14, (Field, Field)> { @@ -62,3 +64,19 @@ struct fooStruct { my_struct: myStruct, foo: Field, } + +fn regression_2906() { + let array_two_vals = [1, 2]; + dep::std::println(f"array_two_vals: {array_two_vals}"); + + let label_two_vals = "12"; + dep::std::println(f"label_two_vals: {label_two_vals}"); + + let array_five_vals = [1, 2, 3, 4, 5]; + dep::std::println(f"array_five_vals: {array_five_vals}"); + + let label_five_vals = "12345"; + dep::std::println(f"label_five_vals: {label_five_vals}"); + + dep::std::println(f"array_five_vals: {array_five_vals}, label_five_vals: {label_five_vals}"); +} \ No newline at end of file