mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-08 13:48:26 +00:00
Fix type of OOB reported on call indirect index outside table.
This commit is contained in:
@@ -2501,7 +2501,7 @@ impl<'ctx, 'a> LLVMFunctionCodeGenerator<'ctx, 'a> {
|
||||
builder.position_at_end(not_in_bounds_block);
|
||||
builder.build_call(
|
||||
intrinsics.throw_trap,
|
||||
&[intrinsics.trap_call_indirect_oob],
|
||||
&[intrinsics.trap_table_access_oob],
|
||||
"throw",
|
||||
);
|
||||
builder.build_unreachable();
|
||||
@@ -2553,7 +2553,8 @@ impl<'ctx, 'a> LLVMFunctionCodeGenerator<'ctx, 'a> {
|
||||
|
||||
let pushed_args = self.state.popn_save_extra(func_type.params().len())?;
|
||||
|
||||
let args: Vec<_> = std::iter::repeat(ctx_ptr).take(2)
|
||||
let args: Vec<_> = std::iter::repeat(ctx_ptr)
|
||||
.take(2)
|
||||
.chain(pushed_args.into_iter().enumerate().map(|(i, (v, info))| {
|
||||
match func_type.params()[i] {
|
||||
Type::F32 => builder.build_bitcast(
|
||||
|
||||
@@ -144,10 +144,10 @@ pub struct Intrinsics<'ctx> {
|
||||
|
||||
pub trap_unreachable: BasicValueEnum<'ctx>,
|
||||
pub trap_call_indirect_sig: BasicValueEnum<'ctx>,
|
||||
pub trap_call_indirect_oob: BasicValueEnum<'ctx>,
|
||||
pub trap_memory_oob: BasicValueEnum<'ctx>,
|
||||
pub trap_illegal_arithmetic: BasicValueEnum<'ctx>,
|
||||
pub trap_misaligned_atomic: BasicValueEnum<'ctx>,
|
||||
pub trap_table_access_oob: BasicValueEnum<'ctx>,
|
||||
|
||||
// VM intrinsics.
|
||||
pub memory_grow_dynamic_local: FunctionValue<'ctx>,
|
||||
@@ -482,9 +482,6 @@ impl<'ctx> Intrinsics<'ctx> {
|
||||
trap_call_indirect_sig: i32_ty
|
||||
.const_int(TrapCode::BadSignature as _, false)
|
||||
.as_basic_value_enum(),
|
||||
trap_call_indirect_oob: i32_ty
|
||||
.const_int(TrapCode::OutOfBounds as _, false)
|
||||
.as_basic_value_enum(),
|
||||
trap_memory_oob: i32_ty
|
||||
.const_int(TrapCode::OutOfBounds as _, false)
|
||||
.as_basic_value_enum(),
|
||||
@@ -496,6 +493,9 @@ impl<'ctx> Intrinsics<'ctx> {
|
||||
trap_misaligned_atomic: i32_ty
|
||||
.const_int(TrapCode::Interrupt as _, false)
|
||||
.as_basic_value_enum(),
|
||||
trap_table_access_oob: i32_ty
|
||||
.const_int(TrapCode::TableAccessOutOfBounds as _, false)
|
||||
.as_basic_value_enum(),
|
||||
|
||||
// VM intrinsics.
|
||||
memory_grow_dynamic_local: module.add_function(
|
||||
|
||||
Reference in New Issue
Block a user