lib/std/lang/il/tests.rad 648 B raw
1
//! Intermediate language tests.
2
3
use std::testing;
4
5
/// Add one register number through a call-scoped context loan.
6
fn observeReg(reg: super::Reg, ctx: &mut opaque) {
7
    unsafe { set *(ctx as &mut u32) += reg.n; }
8
}
9
10
/// Register traversal may reuse one mutable callback context loan.
11
@test fn testForEachRegCallbackLoan() throws (testing::TestError) {
12
    let mut context: u32 = 0;
13
    let instr = super::Instr::Store {
14
        typ: super::Type::W32,
15
        src: super::Val::Reg(super::Reg { n: 1 }),
16
        dst: super::Reg { n: 2 },
17
        offset: 0,
18
    };
19
    super::forEachReg(instr, observeReg, &mut context);
20
    assert context == 3;
21
}