diff --git a/compiler/noirc_evaluator/src/brillig/brillig_ir/instructions.rs b/compiler/noirc_evaluator/src/brillig/brillig_ir/instructions.rs index 95023b9284f..edbcd854d45 100644 --- a/compiler/noirc_evaluator/src/brillig/brillig_ir/instructions.rs +++ b/compiler/noirc_evaluator/src/brillig/brillig_ir/instructions.rs @@ -156,6 +156,7 @@ impl BrilligContext< right.bit_size ); let bit_size = left.bit_size; + assert!(bit_size != BitSize::Field.to_u32::(), "Attempt to modulo fields"); let scratch_var_i = SingleAddrVariable::new(self.allocate_register(), bit_size); let scratch_var_j = SingleAddrVariable::new(self.allocate_register(), bit_size); diff --git a/compiler/noirc_evaluator/src/ssa/parser/tests.rs b/compiler/noirc_evaluator/src/ssa/parser/tests.rs index 1cdbcbc62a3..9f401aab10a 100644 --- a/compiler/noirc_evaluator/src/ssa/parser/tests.rs +++ b/compiler/noirc_evaluator/src/ssa/parser/tests.rs @@ -633,3 +633,19 @@ fn test_parses_keyword_in_function_name() { "; assert_ssa_roundtrip(src); } + +#[test] +#[should_panic = "Attempt to modulo fields"] +fn regression_modulo_fields_brillig() { + use crate::brillig::BrilligOptions; + + let src = " + brillig(inline) predicate_pure fn main f0 { + b0(v0: Field, v1: Field): + v2 = mod v0, v1 + return v2 + } + "; + let ssa = Ssa::from_str(src).unwrap(); + ssa.to_brillig(&BrilligOptions::default()); +}