0xMiden / 0xMiden/miden-vm

Non-empty stack overflow table

未關閉
#1,537 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
instruction set
主要語言
Rust
星號
772
分支
352
平均合併
1 天 12 小時
30 天內合併 PR
93

描述

The following test fails with error `OutputStackOverflow(1)`, presumably because there were 2 `PUSH` instructions, and one `ADD` (which shifts stack left), and so the overflow table contains a 0 entry at the end and is contained non-empty. This is probably a new behavior since #1456.

I'm not sure why this doesn't occur in more tests yet, but it seems like the behavior we want is: if a 0 is pushed onto the stack overflow table, and the table is empty, then don't populate the overflow table (since when we shift right on an empty overflow table, we populate `s[15]` with 0).

```rs
#[test]
fn test() {
use crate::{prove, Assembler, DefaultHost, Program, ProvingOptions, StackInputs};
// instantiate the assembler
let mut assembler = Assembler::default();

// this is our program, we compile it from assembly code
let program = assembler.assemble_program("begin push.3 push.5 add end").unwrap();

// let's execute it and generate a STARK proof
let (outputs, proof) = prove(
&program,
StackInputs::default(), // we won't provide any inputs
DefaultHost::default(), // we'll be using a default host
ProvingOptions::default(), // we'll be using default options
)
.unwrap();

// the output should be 8
assert_eq!(8, outputs.first().unwrap().as_int());
}
```

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。