Merge branch 'main' into kvpanch/llvm_21

This commit is contained in:
kvpanch
2025-12-16 07:13:09 -05:00
committed by GitHub
7 changed files with 70 additions and 17 deletions
@@ -51,11 +51,11 @@ impl RuntimeFunction for WordToPointer {
)?;
let block_continue = context.append_basic_block("offset_pointer_ok");
let block_trap = context.append_basic_block("offset_pointer_overflow");
context.build_conditional_branch(is_overflow, block_trap, block_continue)?;
let block_invalid = context.append_basic_block("offset_pointer_overflow");
context.build_conditional_branch(is_overflow, block_invalid, block_continue)?;
context.set_basic_block(block_trap);
context.build_call(context.intrinsics().trap, &[], "invalid_trap");
context.set_basic_block(block_invalid);
context.build_runtime_call(revive_runtime_api::polkavm_imports::INVALID, &[]);
context.build_unreachable();
context.set_basic_block(block_continue);
@@ -52,12 +52,14 @@ pub fn stop(context: &mut Context) -> anyhow::Result<()> {
/// Translates the `invalid` instruction.
/// Burns all gas using an out-of-bounds memory store, causing a panic.
pub fn invalid(context: &mut Context) -> anyhow::Result<()> {
crate::polkavm::evm::memory::store(
context,
context.word_type().const_all_ones(),
context.word_const(0),
)?;
context.build_call(context.intrinsics().trap, &[], "invalid_trap");
let invalid_block = context.append_basic_block("explicit_invalid");
context.build_unconditional_branch(invalid_block);
context.set_basic_block(invalid_block);
context.build_runtime_call(revive_runtime_api::polkavm_imports::INVALID, &[]);
context.build_unreachable();
context.set_basic_block(context.append_basic_block("dead_code"));
Ok(())
}