@@ -136,21 +136,37 @@ fn brillig_to_bits() {
136136 assert_artifact_snapshot ! ( foo, @r"
137137 fn foo
138138 0: sp[4] = const u32 2
139- 1: sp[3] = @1
140- 2: sp[5] = const u32 9
141- 3: @1 = u32 add @1, sp[5]
142- 4: sp[3] = indirect const u32 1
143- 5: sp[5] = u32 add sp[3], @2
144- 6: sp[6] = const u32 8
145- 7: to_radix(input: sp[2], radix: sp[4], num_limbs: 8, output_pointer: sp[5], output_bits: true)
146- 8: @3 = sp[5]
147- 9: @4 = sp[6]
148- 10: call 0 // -> ArrayReverse
149- 11: sp[2] = sp[3]
150- 12: return
139+ 1: sp[5] = const bool 1
140+ 2: sp[3] = @1
141+ 3: sp[6] = const u32 9
142+ 4: @1 = u32 add @1, sp[6]
143+ 5: sp[3] = indirect const u32 1
144+ 6: sp[6] = u32 add sp[3], @2
145+ 7: sp[7] = const u32 8
146+ 8: to_radix(input: sp[2], radix: sp[4], num_limbs: sp[7], output_pointer: sp[6], output_bits: sp[5])
147+ 9: @3 = sp[6]
148+ 10: @4 = sp[7]
149+ 11: call 0 // -> ArrayReverse
150+ 12: sp[2] = sp[3]
151+ 13: return
151152 " ) ;
152153}
153154
155+ // `to_le_bits::<N>` requesting more limbs than the field is rejected at compile time.
156+ #[ test]
157+ #[ should_panic( expected = "ToRadix num_limbs" ) ]
158+ fn brillig_to_bits_rejects_more_limbs_than_field_bits ( ) {
159+ let src = "
160+ brillig(inline) fn foo f0 {
161+ b0(v0: Field):
162+ v1 = call to_le_bits(v0) -> [u1; 255]
163+ return v1
164+ }
165+ " ;
166+
167+ let _ = ssa_to_brillig_artifacts ( src) ;
168+ }
169+
154170// Tests ToRadix intrinsic code-gen for Brillig.
155171#[ test]
156172fn brillig_to_radix ( ) {
@@ -166,18 +182,19 @@ fn brillig_to_radix() {
166182 let foo = & brillig. ssa_function_to_brillig [ & Id :: test_new ( 0 ) ] ;
167183 assert_artifact_snapshot ! ( foo, @r"
168184 fn foo
169- 0: sp[4] = @1
170- 1: sp[5] = const u32 9
171- 2: @1 = u32 add @1, sp[5]
172- 3: sp[4] = indirect const u32 1
173- 4: sp[5] = u32 add sp[4], @2
174- 5: sp[6] = const u32 8
175- 6: to_radix(input: sp[2], radix: sp[3], num_limbs: 8, output_pointer: sp[5], output_bits: false)
176- 7: @3 = sp[5]
177- 8: @4 = sp[6]
178- 9: call 0 // -> ArrayReverse
179- 10: sp[2] = sp[4]
180- 11: return
185+ 0: sp[5] = const bool 0
186+ 1: sp[4] = @1
187+ 2: sp[6] = const u32 9
188+ 3: @1 = u32 add @1, sp[6]
189+ 4: sp[4] = indirect const u32 1
190+ 5: sp[6] = u32 add sp[4], @2
191+ 6: sp[7] = const u32 8
192+ 7: to_radix(input: sp[2], radix: sp[3], num_limbs: sp[7], output_pointer: sp[6], output_bits: sp[5])
193+ 8: @3 = sp[6]
194+ 9: @4 = sp[7]
195+ 10: call 0 // -> ArrayReverse
196+ 11: sp[2] = sp[4]
197+ 12: return
181198 " ) ;
182199}
183200
0 commit comments