A UB before revm 3.4.0
Reproduce:
(default_venv) mio@station /t/ub_repro (master) [0|1]> cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.02s
Running `target/debug/ub_repro`
0x5bf69e2d5c00, aligned: true
0x5bf69e2d5c01, aligned: false
0x5bf69e2d5c02, aligned: false
Continue
(default_venv) mio@station /t/ub_repro (master)> cargo run --release
Finished release [optimized] target(s) in 0.02s
Running `target/release/ub_repro`
0x651fc2f01c00, aligned: true
0x651fc2f01c01, aligned: false
0x651fc2f01c02, aligned: false
StackUnderflow
(default_venv) mio@station /t/ub_repro (master)>
Miri:
0x873ab, aligned: false
0x873ac, aligned: false
0x873ad, aligned: false
error: Undefined Behavior: `assume` called with `false`
--> /home/mio/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/slice/index.rs:239:13
|
239 | crate::intrinsics::assume(self < slice.len());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `assume` called with `false`
|
= help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
= help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information
= note: BACKTRACE:
= note: inside `<usize as std::slice::SliceIndex<[revm_primitives::ruint::Uint<256, 4>]>>::get_unchecked` at /home/mio/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/slice/index.rs:239:13: 239:58
= note: inside `revm_primitives::bitvec::macros::internal::core::slice::<impl [revm_primitives::ruint::Uint<256, 4>]>::get_unchecked::<usize>` at /home/mio/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/slice/mod.rs:686:20: 686:45
= note: inside `revm_interpreter::Stack::pop2_unsafe` at /home/mio/.cargo/git/checkouts/revm-4517530ba533de04/fa764aa/crates/interpreter/src/interpreter/stack.rs:144:14: 144:46
= note: inside `revm_interpreter::instructions::memory::mstore` at /home/mio/.cargo/git/checkouts/revm-4517530ba533de04/fa764aa/crates/interpreter/src/instructions/macros.rs:132:35: 132:62
note: inside `main`
--> src/main.rs:37:5
|
37 | memory::mstore(&mut intrp, &mut host);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
error: aborting due to 1 previous error; 2 warnings emitted