FA-90121 / Bytecode virtual machines / Open access
Structured control: untaken br_if leaves its condition behind · case 01
Code after a failed conditional branch computes with an extra zero on the stack.
ROOT CAUSE
The condition is peeked instead of popped when the branch is not taken.
THE FAILURE
The condition is peeked instead of popped when the branch is not taken.
Unsuccessful approach: Popping but inverting the test branches exactly when the condition is zero.
Case contract
WebAssembly-style structured control over a value stack. block k / loop / end nest; each block or loop pushes a label recording its operand height and arity (block: k result values, loop: 0). br d targets the d-th enclosing label counting outward from 0; the branch keeps the top arity values, discards operands down to the label height, then for a block pops that label and continues after its end, for a loop keeps the loop label and continues at the first instruction inside the loop. br_if pops a condition and branches when it is non-zero. Other ops: const v, add, sub, eqz, get k, set k, drop. Each instruction costs one fuel. Return status (done/fuel/trap), stack and locals.
Why this case matters
Label-depth branching is the core of structured bytecode interpreters.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(code, locals_, fuel):
match = {}
opens = []
for i, ins in enumerate(code):
if ins[0] in ('block', 'loop'):
opens.append(i)
elif ins[0] == 'end':
match[opens.pop()] = i
loc = list(locals_)
stack = []
labels = []
pc = 0
steps = 0
try:
while pc < len(code):
if steps == fuel:
return {'status': 'fuel', 'stack': stack, 'locals': loc}
steps += 1
ins = code[pc]
op = ins[0]
if op in ('block', 'loop'):
labels.append({'kind': op, 'pc': pc, 'end': match[pc], 'height': len(stack),
'arity': ins[1] if op == 'block' else 0})
pc += 1
elif op == 'end':
labels.pop()
pc += 1
elif op in ('br', 'br_if'):
if op == 'br_if' and stack[-1] == 0:
pc += 1
continue
target = labels[len(labels) - 1 - ins[1]]
keep = stack[len(stack) - target['arity']:] if target['arity'] else []
del stack[target['height']:]
stack.extend(keep)
if target['kind'] == 'loop':
del labels[len(labels) - ins[1]:]
pc = target['pc'] + 1
else:
del labels[len(labels) - 1 - ins[1]:]
pc = target['end'] + 1
elif op == 'const':
stack.append(ins[1])
pc += 1
elif op in ('add', 'sub'):
b = stack.pop()
a = stack.pop()
stack.append(a + b if op == 'add' else a - b)
pc += 1
elif op == 'eqz':
stack.append(1 if stack.pop() == 0 else 0)
pc += 1
elif op == 'get':
stack.append(loc[ins[1]])
pc += 1
elif op == 'set':
loc[ins[1]] = stack.pop()
pc += 1
else:
stack.pop()
pc += 1
except IndexError:
return {'status': 'trap', 'stack': stack, 'locals': loc}
return {'status': 'done', 'stack': stack, 'locals': loc}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression: counted loop exits through outer block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[2, 0],
500),
{'locals': [0, 3], 'stack': [], 'status': 'done'}),
('continue from inside a nested block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[2, 0],
500),
{'locals': [0, 4], 'stack': [], 'status': 'done'}),
('continue loop with more iterations',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[4, 0],
900),
{'locals': [0, 8], 'stack': [], 'status': 'done'}),
('block result keeps one value above outer operand',
([['const', 41], ['block', 1], ['const', 5], ['const', 7], ['br', 0], ['const', 99], ['end']], [], 50),
{'locals': [], 'stack': [41, 7], 'status': 'done'}),
('void block branch discards operands',
([['block', 0], ['const', 1], ['const', 1], ['br', 0], ['end'], ['const', 3]], [], 50),
{'locals': [], 'stack': [3], 'status': 'done'}),
('untaken br_if consumes its condition',
([['const', 10], ['block', 0], ['const', 0], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [13], 'status': 'done'}),
('taken br_if exits the block',
([['const', 10], ['block', 0], ['const', 1], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [10], 'status': 'done'}),
('control: fuel exhaustion',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[50, 0],
21),
{'locals': [49, 99], 'stack': [], 'status': 'fuel'})],
[('regression: counted loop exits through outer block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[3, 0],
500),
{'locals': [0, 6], 'stack': [], 'status': 'done'}),
('continue from inside a nested block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[3, 0],
500),
{'locals': [0, 6], 'stack': [], 'status': 'done'}),
('continue loop with more iterations',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[5, 0],
900),
{'locals': [0, 10], 'stack': [], 'status': 'done'}),
('block result keeps one value above outer operand',
([['const', 42], ['block', 1], ['const', 5], ['const', 7], ['br', 0], ['const', 99], ['end']], [], 50),
{'locals': [], 'stack': [42, 7], 'status': 'done'}),
('void block branch discards operands',
([['block', 0], ['const', 1], ['const', 2], ['br', 0], ['end'], ['const', 3]], [], 50),
{'locals': [], 'stack': [3], 'status': 'done'}),
('untaken br_if consumes its condition',
([['const', 20], ['block', 0], ['const', 0], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [23], 'status': 'done'}),
('taken br_if exits the block',
([['const', 10], ['block', 0], ['const', 2], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [10], 'status': 'done'}),
('control: fuel exhaustion',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[50, 0],
22),
{'locals': [49, 99], 'stack': [49], 'status': 'fuel'})],
[('regression: counted loop exits through outer block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[4, 0],
500),
{'locals': [0, 10], 'stack': [], 'status': 'done'}),
('continue from inside a nested block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[4, 0],
500),
{'locals': [0, 8], 'stack': [], 'status': 'done'}),
('continue loop with more iterations',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[6, 0],
900),
{'locals': [0, 12], 'stack': [], 'status': 'done'}),
('block result keeps one value above outer operand',
([['const', 43], ['block', 1], ['const', 5], ['const', 7], ['br', 0], ['const', 99], ['end']], [], 50),
{'locals': [], 'stack': [43, 7], 'status': 'done'}),
('void block branch discards operands',
([['block', 0], ['const', 1], ['const', 3], ['br', 0], ['end'], ['const', 3]], [], 50),
{'locals': [], 'stack': [3], 'status': 'done'}),
('untaken br_if consumes its condition',
([['const', 30], ['block', 0], ['const', 0], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [33], 'status': 'done'}),
('taken br_if exits the block',
([['const', 10], ['block', 0], ['const', 3], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [10], 'status': 'done'}),
('control: fuel exhaustion',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[50, 0],
23),
{'locals': [49, 99], 'stack': [49, 1], 'status': 'fuel'})],
[('regression: counted loop exits through outer block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[5, 0],
500),
{'locals': [0, 15], 'stack': [], 'status': 'done'}),
('continue from inside a nested block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[5, 0],
500),
{'locals': [0, 10], 'stack': [], 'status': 'done'}),
('continue loop with more iterations',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[7, 0],
900),
{'locals': [0, 14], 'stack': [], 'status': 'done'}),
('block result keeps one value above outer operand',
([['const', 44], ['block', 1], ['const', 5], ['const', 7], ['br', 0], ['const', 99], ['end']], [], 50),
{'locals': [], 'stack': [44, 7], 'status': 'done'}),
('void block branch discards operands',
([['block', 0], ['const', 1], ['const', 4], ['br', 0], ['end'], ['const', 3]], [], 50),
{'locals': [], 'stack': [3], 'status': 'done'}),
('untaken br_if consumes its condition',
([['const', 40], ['block', 0], ['const', 0], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [43], 'status': 'done'}),
('taken br_if exits the block',
([['const', 10], ['block', 0], ['const', 4], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [10], 'status': 'done'}),
('control: fuel exhaustion',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[50, 0],
24),
{'locals': [49, 99], 'stack': [48], 'status': 'fuel'})],
[('regression: counted loop exits through outer block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[6, 0],
500),
{'locals': [0, 21], 'stack': [], 'status': 'done'}),
('continue from inside a nested block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[6, 0],
500),
{'locals': [0, 12], 'stack': [], 'status': 'done'}),
('continue loop with more iterations',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[8, 0],
900),
{'locals': [0, 16], 'stack': [], 'status': 'done'}),
('block result keeps one value above outer operand',
([['const', 45], ['block', 1], ['const', 5], ['const', 7], ['br', 0], ['const', 99], ['end']], [], 50),
{'locals': [], 'stack': [45, 7], 'status': 'done'}),
('void block branch discards operands',
([['block', 0], ['const', 1], ['const', 5], ['br', 0], ['end'], ['const', 3]], [], 50),
{'locals': [], 'stack': [3], 'status': 'done'}),
('untaken br_if consumes its condition',
([['const', 50], ['block', 0], ['const', 0], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [53], 'status': 'done'}),
('taken br_if exits the block',
([['const', 10], ['block', 0], ['const', 5], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [10], 'status': 'done'}),
('control: fuel exhaustion',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[50, 0],
25),
{'locals': [48, 99], 'stack': [], 'status': 'fuel'})]]
for label, args, expected in cases[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: counted loop exits through outer block | {'locals': [0, 3], 'stack': [], 'status': 'done'} | {'locals': [0, 3], 'stack': [], 'status': 'done'} | Passed |
| continue from inside a nested block | {'locals': [0, 4], 'stack': [], 'status': 'done'} | {'locals': [0, 4], 'stack': [], 'status': 'done'} | Passed |
| continue loop with more iterations | {'locals': [0, 8], 'stack': [], 'status': 'done'} | {'locals': [0, 8], 'stack': [], 'status': 'done'} | Passed |
| block result keeps one value above outer operand | {'locals': [], 'stack': [41, 7], 'status': 'done'} | {'locals': [], 'stack': [41, 7], 'status': 'done'} | Passed |
| void block branch discards operands | {'locals': [], 'stack': [3], 'status': 'done'} | {'locals': [], 'stack': [3], 'status': 'done'} | Passed |
| untaken br_if consumes its condition | {'locals': [], 'stack': [10, 3], 'status': 'done'} | {'locals': [], 'stack': [13], 'status': 'done'} | Failed |
| taken br_if exits the block | {'locals': [], 'stack': [10], 'status': 'done'} | {'locals': [], 'stack': [10], 'status': 'done'} | Passed |
| control: fuel exhaustion | {'locals': [49, 99], 'stack': [0], 'status': 'fuel'} | {'locals': [49, 99], 'stack': [], 'status': 'fuel'} | Failed |
SHA-256 / 0eff6f476f00a23971bb17920a0418e92a60c2f583bd5b364b20aabb53530677
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(code, locals_, fuel):
match = {}
opens = []
for i, ins in enumerate(code):
if ins[0] in ('block', 'loop'):
opens.append(i)
elif ins[0] == 'end':
match[opens.pop()] = i
loc = list(locals_)
stack = []
labels = []
pc = 0
steps = 0
try:
while pc < len(code):
if steps == fuel:
return {'status': 'fuel', 'stack': stack, 'locals': loc}
steps += 1
ins = code[pc]
op = ins[0]
if op in ('block', 'loop'):
labels.append({'kind': op, 'pc': pc, 'end': match[pc], 'height': len(stack),
'arity': ins[1] if op == 'block' else 0})
pc += 1
elif op == 'end':
labels.pop()
pc += 1
elif op in ('br', 'br_if'):
if op == 'br_if' and stack.pop() != 0:
pc += 1
continue
target = labels[len(labels) - 1 - ins[1]]
keep = stack[len(stack) - target['arity']:] if target['arity'] else []
del stack[target['height']:]
stack.extend(keep)
if target['kind'] == 'loop':
del labels[len(labels) - ins[1]:]
pc = target['pc'] + 1
else:
del labels[len(labels) - 1 - ins[1]:]
pc = target['end'] + 1
elif op == 'const':
stack.append(ins[1])
pc += 1
elif op in ('add', 'sub'):
b = stack.pop()
a = stack.pop()
stack.append(a + b if op == 'add' else a - b)
pc += 1
elif op == 'eqz':
stack.append(1 if stack.pop() == 0 else 0)
pc += 1
elif op == 'get':
stack.append(loc[ins[1]])
pc += 1
elif op == 'set':
loc[ins[1]] = stack.pop()
pc += 1
else:
stack.pop()
pc += 1
except IndexError:
return {'status': 'trap', 'stack': stack, 'locals': loc}
return {'status': 'done', 'stack': stack, 'locals': loc}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression: counted loop exits through outer block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[2, 0],
500),
{'locals': [0, 3], 'stack': [], 'status': 'done'}),
('continue from inside a nested block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[2, 0],
500),
{'locals': [0, 4], 'stack': [], 'status': 'done'}),
('continue loop with more iterations',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[4, 0],
900),
{'locals': [0, 8], 'stack': [], 'status': 'done'}),
('block result keeps one value above outer operand',
([['const', 41], ['block', 1], ['const', 5], ['const', 7], ['br', 0], ['const', 99], ['end']], [], 50),
{'locals': [], 'stack': [41, 7], 'status': 'done'}),
('void block branch discards operands',
([['block', 0], ['const', 1], ['const', 1], ['br', 0], ['end'], ['const', 3]], [], 50),
{'locals': [], 'stack': [3], 'status': 'done'}),
('untaken br_if consumes its condition',
([['const', 10], ['block', 0], ['const', 0], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [13], 'status': 'done'}),
('taken br_if exits the block',
([['const', 10], ['block', 0], ['const', 1], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [10], 'status': 'done'}),
('control: fuel exhaustion',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[50, 0],
21),
{'locals': [49, 99], 'stack': [], 'status': 'fuel'})],
[('regression: counted loop exits through outer block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[3, 0],
500),
{'locals': [0, 6], 'stack': [], 'status': 'done'}),
('continue from inside a nested block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[3, 0],
500),
{'locals': [0, 6], 'stack': [], 'status': 'done'}),
('continue loop with more iterations',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[5, 0],
900),
{'locals': [0, 10], 'stack': [], 'status': 'done'}),
('block result keeps one value above outer operand',
([['const', 42], ['block', 1], ['const', 5], ['const', 7], ['br', 0], ['const', 99], ['end']], [], 50),
{'locals': [], 'stack': [42, 7], 'status': 'done'}),
('void block branch discards operands',
([['block', 0], ['const', 1], ['const', 2], ['br', 0], ['end'], ['const', 3]], [], 50),
{'locals': [], 'stack': [3], 'status': 'done'}),
('untaken br_if consumes its condition',
([['const', 20], ['block', 0], ['const', 0], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [23], 'status': 'done'}),
('taken br_if exits the block',
([['const', 10], ['block', 0], ['const', 2], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [10], 'status': 'done'}),
('control: fuel exhaustion',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[50, 0],
22),
{'locals': [49, 99], 'stack': [49], 'status': 'fuel'})],
[('regression: counted loop exits through outer block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[4, 0],
500),
{'locals': [0, 10], 'stack': [], 'status': 'done'}),
('continue from inside a nested block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[4, 0],
500),
{'locals': [0, 8], 'stack': [], 'status': 'done'}),
('continue loop with more iterations',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[6, 0],
900),
{'locals': [0, 12], 'stack': [], 'status': 'done'}),
('block result keeps one value above outer operand',
([['const', 43], ['block', 1], ['const', 5], ['const', 7], ['br', 0], ['const', 99], ['end']], [], 50),
{'locals': [], 'stack': [43, 7], 'status': 'done'}),
('void block branch discards operands',
([['block', 0], ['const', 1], ['const', 3], ['br', 0], ['end'], ['const', 3]], [], 50),
{'locals': [], 'stack': [3], 'status': 'done'}),
('untaken br_if consumes its condition',
([['const', 30], ['block', 0], ['const', 0], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [33], 'status': 'done'}),
('taken br_if exits the block',
([['const', 10], ['block', 0], ['const', 3], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [10], 'status': 'done'}),
('control: fuel exhaustion',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[50, 0],
23),
{'locals': [49, 99], 'stack': [49, 1], 'status': 'fuel'})],
[('regression: counted loop exits through outer block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[5, 0],
500),
{'locals': [0, 15], 'stack': [], 'status': 'done'}),
('continue from inside a nested block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[5, 0],
500),
{'locals': [0, 10], 'stack': [], 'status': 'done'}),
('continue loop with more iterations',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[7, 0],
900),
{'locals': [0, 14], 'stack': [], 'status': 'done'}),
('block result keeps one value above outer operand',
([['const', 44], ['block', 1], ['const', 5], ['const', 7], ['br', 0], ['const', 99], ['end']], [], 50),
{'locals': [], 'stack': [44, 7], 'status': 'done'}),
('void block branch discards operands',
([['block', 0], ['const', 1], ['const', 4], ['br', 0], ['end'], ['const', 3]], [], 50),
{'locals': [], 'stack': [3], 'status': 'done'}),
('untaken br_if consumes its condition',
([['const', 40], ['block', 0], ['const', 0], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [43], 'status': 'done'}),
('taken br_if exits the block',
([['const', 10], ['block', 0], ['const', 4], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [10], 'status': 'done'}),
('control: fuel exhaustion',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[50, 0],
24),
{'locals': [49, 99], 'stack': [48], 'status': 'fuel'})],
[('regression: counted loop exits through outer block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[6, 0],
500),
{'locals': [0, 21], 'stack': [], 'status': 'done'}),
('continue from inside a nested block',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[6, 0],
500),
{'locals': [0, 12], 'stack': [], 'status': 'done'}),
('continue loop with more iterations',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['block', 0],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['get', 1],
['const', 2],
['add'],
['set', 1],
['br', 1],
['end'],
['const', 999],
['set', 1],
['end'],
['end']],
[8, 0],
900),
{'locals': [0, 16], 'stack': [], 'status': 'done'}),
('block result keeps one value above outer operand',
([['const', 45], ['block', 1], ['const', 5], ['const', 7], ['br', 0], ['const', 99], ['end']], [], 50),
{'locals': [], 'stack': [45, 7], 'status': 'done'}),
('void block branch discards operands',
([['block', 0], ['const', 1], ['const', 5], ['br', 0], ['end'], ['const', 3]], [], 50),
{'locals': [], 'stack': [3], 'status': 'done'}),
('untaken br_if consumes its condition',
([['const', 50], ['block', 0], ['const', 0], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [53], 'status': 'done'}),
('taken br_if exits the block',
([['const', 10], ['block', 0], ['const', 5], ['br_if', 0], ['const', 3], ['add'], ['end']], [], 50),
{'locals': [], 'stack': [10], 'status': 'done'}),
('control: fuel exhaustion',
([['block', 0],
['loop', 0],
['get', 0],
['eqz'],
['br_if', 1],
['get', 1],
['get', 0],
['add'],
['set', 1],
['get', 0],
['const', 1],
['sub'],
['set', 0],
['br', 0],
['end'],
['end']],
[50, 0],
25),
{'locals': [48, 99], 'stack': [], 'status': 'fuel'})]]
for label, args, expected in cases[N - 1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: counted loop exits through outer block | {'locals': [2, 0], 'stack': [], 'status': 'done'} | {'locals': [0, 3], 'stack': [], 'status': 'done'} | Failed |
| continue from inside a nested block | {'locals': [2, 0], 'stack': [], 'status': 'done'} | {'locals': [0, 4], 'stack': [], 'status': 'done'} | Failed |
| continue loop with more iterations | {'locals': [4, 0], 'stack': [], 'status': 'done'} | {'locals': [0, 8], 'stack': [], 'status': 'done'} | Failed |
| block result keeps one value above outer operand | {'locals': [], 'stack': [41, 7], 'status': 'done'} | {'locals': [], 'stack': [41, 7], 'status': 'done'} | Passed |
| void block branch discards operands | {'locals': [], 'stack': [3], 'status': 'done'} | {'locals': [], 'stack': [3], 'status': 'done'} | Passed |
| untaken br_if consumes its condition | {'locals': [], 'stack': [10], 'status': 'done'} | {'locals': [], 'stack': [13], 'status': 'done'} | Failed |
| taken br_if exits the block | {'locals': [], 'stack': [13], 'status': 'done'} | {'locals': [], 'stack': [10], 'status': 'done'} | Failed |
| control: fuel exhaustion | {'locals': [50, 0], 'stack': [], 'status': 'done'} | {'locals': [49, 99], 'stack': [], 'status': 'fuel'} | Failed |
SHA-256 / cd19fd0428ed312eca5ef2748155e2bb9d0a8525f6add8f6ce72410233188c8e
HELD IN THE MEMBER ARCHIVE
The verified repair and its recorded checks are member-only.
This mechanism has 8 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.
Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.
Member access is invitation-based. Sign in with your invited account to inspect the repair.
Sign in to the archive ↗Verification & scope
A deterministic, bounded teaching model of one bytecode virtual machine mechanism with a stipulated instruction encoding; it is not a production VM and claims no conformance to any real specification. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:51:23.867163+00:00.
Case digest / 3b4471fd034a2132784807cc2fbab0d1bba274e5195e2c1b850ef9d0a11a3177