Skip to content

Commit 40847e0

Browse files
authored
fix(SSA): validate that enable_side_effects takes a u1 (#11001)
1 parent a1fed42 commit 40847e0

File tree

3 files changed

+29
-11
lines changed

3 files changed

+29
-11
lines changed

compiler/noirc_evaluator/src/ssa/opt/remove_enable_side_effects.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -208,13 +208,13 @@ mod test {
208208
fn keeps_enable_side_effects_for_instructions_that_have_side_effects() {
209209
let src = "
210210
acir(inline) fn main f0 {
211-
b0(v0: [u16; 3], v1: u32, v2: u32):
212-
enable_side_effects v1
213-
v3 = array_get v0, index v1 -> u16
214-
enable_side_effects v1
211+
b0(v0: [u16; 3], v1: u32, v2: u1, v3: u1):
212+
enable_side_effects v2
215213
v4 = array_get v0, index v1 -> u16
216214
enable_side_effects v2
217215
v5 = array_get v0, index v1 -> u16
216+
enable_side_effects v3
217+
v6 = array_get v0, index v1 -> u16
218218
enable_side_effects u1 1
219219
v7 = array_get v0, index v1 -> u16
220220
return
@@ -224,16 +224,17 @@ mod test {
224224
let ssa = ssa.remove_enable_side_effects();
225225
assert_ssa_snapshot!(ssa, @r"
226226
acir(inline) fn main f0 {
227-
b0(v0: [u16; 3], v1: u32, v2: u32):
228-
enable_side_effects v1
229-
v3 = array_get v0, index v1 -> u16
230-
v4 = array_get v0, index v1 -> u16
227+
b0(v0: [u16; 3], v1: u32, v2: u1, v3: u1):
231228
enable_side_effects v2
229+
v4 = array_get v0, index v1 -> u16
232230
v5 = array_get v0, index v1 -> u16
231+
enable_side_effects v3
232+
v6 = array_get v0, index v1 -> u16
233233
enable_side_effects u1 1
234-
v7 = array_get v0, index v1 -> u16
234+
v8 = array_get v0, index v1 -> u16
235235
return
236-
}");
236+
}
237+
");
237238
}
238239

239240
#[test]

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ fn test_constrain_not_equal() {
371371
fn test_enable_side_effects() {
372372
let src = "
373373
acir(inline) fn main f0 {
374-
b0(v0: Field):
374+
b0(v0: u1):
375375
enable_side_effects v0
376376
return
377377
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,10 @@ impl<'f> Validator<'f> {
267267
);
268268
}
269269
}
270+
Instruction::EnableSideEffectsIf { condition } => {
271+
let condition_type = dfg.type_of_value(*condition);
272+
assert_u1(&condition_type, "enable_side_effects condition");
273+
}
270274
_ => (),
271275
}
272276
}
@@ -1982,4 +1986,17 @@ mod tests {
19821986

19831987
Validator::new(&ssa.functions[&main_id], &ssa).run();
19841988
}
1989+
1990+
#[test]
1991+
#[should_panic(expected = "enable_side_effects condition must be u1, not u32")]
1992+
fn enable_side_effects_with_non_bool() {
1993+
let src = "
1994+
acir(inline) pure fn main f0 {
1995+
b0(v0: u32):
1996+
enable_side_effects v0
1997+
return
1998+
}
1999+
";
2000+
let _ = Ssa::from_str(src).unwrap();
2001+
}
19852002
}

0 commit comments

Comments
 (0)