@@ -806,7 +806,8 @@ fn simplify_derive_generators(
806
806
results. push ( is_infinite) ;
807
807
}
808
808
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 ) ;
810
811
let result = make_array ( dfg, results. into ( ) , typ, block, call_stack) ;
811
812
SimplifyResult :: SimplifiedTo ( result)
812
813
} else {
@@ -816,3 +817,34 @@ fn simplify_derive_generators(
816
817
unreachable ! ( "Unexpected number of arguments to derive_generators" ) ;
817
818
}
818
819
}
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
+ }
0 commit comments