Skip to content

Commit efa5cc4

Browse files
authored
fix: correct type when simplifying derive_pedersen_generators (#6579)
1 parent 7658c17 commit efa5cc4

File tree

2 files changed

+38
-1
lines changed
  • compiler/noirc_evaluator/src/ssa

2 files changed

+38
-1
lines changed

compiler/noirc_evaluator/src/ssa/ir/instruction/call.rs

+33-1
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,8 @@ fn simplify_derive_generators(
806806
results.push(is_infinite);
807807
}
808808
let len = results.len();
809-
let typ = Type::Array(vec![Type::field()].into(), len);
809+
let typ =
810+
Type::Array(vec![Type::field(), Type::field(), Type::unsigned(1)].into(), len / 3);
810811
let result = make_array(dfg, results.into(), typ, block, call_stack);
811812
SimplifyResult::SimplifiedTo(result)
812813
} else {
@@ -816,3 +817,34 @@ fn simplify_derive_generators(
816817
unreachable!("Unexpected number of arguments to derive_generators");
817818
}
818819
}
820+
821+
#[cfg(test)]
822+
mod tests {
823+
use crate::ssa::{opt::assert_normalized_ssa_equals, Ssa};
824+
825+
#[test]
826+
fn simplify_derive_generators_has_correct_type() {
827+
let src = "
828+
brillig(inline) fn main f0 {
829+
b0():
830+
v0 = make_array [u8 68, u8 69, u8 70, u8 65, u8 85, u8 76, u8 84, u8 95, u8 68, u8 79, u8 77, u8 65, u8 73, u8 78, u8 95, u8 83, u8 69, u8 80, u8 65, u8 82, u8 65, u8 84, u8 79, u8 82] : [u8; 24]
831+
832+
// This call was previously incorrectly simplified to something that returned `[Field; 3]`
833+
v2 = call derive_pedersen_generators(v0, u32 0) -> [(Field, Field, u1); 1]
834+
835+
return v2
836+
}
837+
";
838+
let ssa = Ssa::from_str(src).unwrap();
839+
840+
let expected = "
841+
brillig(inline) fn main f0 {
842+
b0():
843+
v15 = make_array [u8 68, u8 69, u8 70, u8 65, u8 85, u8 76, u8 84, u8 95, u8 68, u8 79, u8 77, u8 65, u8 73, u8 78, u8 95, u8 83, u8 69, u8 80, u8 65, u8 82, u8 65, u8 84, u8 79, u8 82] : [u8; 24]
844+
v19 = make_array [Field 3728882899078719075161482178784387565366481897740339799480980287259621149274, Field -9903063709032878667290627648209915537972247634463802596148419711785767431332, u1 0] : [(Field, Field, u1); 1]
845+
return v19
846+
}
847+
";
848+
assert_normalized_ssa_equals(ssa, expected);
849+
}
850+
}

compiler/noirc_evaluator/src/ssa/parser/mod.rs

+5
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ mod tests;
2828
mod token;
2929

3030
impl Ssa {
31+
/// Creates an Ssa object from the given string.
32+
///
33+
/// Note that the resulting Ssa might not be exactly the same as the given string.
34+
/// This is because, internally, the Ssa is built using a `FunctionBuilder`, so
35+
/// some instructions might be simplified while they are inserted.
3136
pub(crate) fn from_str(src: &str) -> Result<Ssa, SsaErrorWithSource> {
3237
let mut parser =
3338
Parser::new(src).map_err(|err| SsaErrorWithSource::parse_error(err, src))?;

0 commit comments

Comments
 (0)