Fix dynamic memory styles in llvm.

Dynamic memory has the same struct as static memory, in particular the length field is not a pointer to a length field.

Also, send the correct trap code.
This commit is contained in:
Nick Lewycky
2020-08-19 17:41:37 -07:00
parent 8baae3aa8d
commit 5a6ecd4d00
2 changed files with 10 additions and 13 deletions

View File

@ -1000,7 +1000,7 @@ impl<'ctx, 'a> LLVMFunctionCodeGenerator<'ctx, 'a> {
{
MemoryCache::Dynamic {
ptr_to_base_ptr,
current_length_ptr,
ptr_to_current_length,
} => {
// Bounds check it.
let minimum = self.wasm_module.memories[memory_index].minimum;
@ -1024,8 +1024,9 @@ impl<'ctx, 'a> LLVMFunctionCodeGenerator<'ctx, 'a> {
.unwrap_or_else(|| {
let load_offset_end = builder.build_int_add(offset, value_size_v, "");
let current_length =
builder.build_load(current_length_ptr, "").into_int_value();
let current_length = builder
.build_load(ptr_to_current_length, "")
.into_int_value();
tbaa_label(
self.module,
self.intrinsics,
@ -1053,7 +1054,7 @@ impl<'ctx, 'a> LLVMFunctionCodeGenerator<'ctx, 'a> {
intrinsics.expect_i1,
&[
ptr_in_bounds.as_basic_value_enum(),
intrinsics.i1_ty.const_int(1, false).as_basic_value_enum(),
intrinsics.i1_ty.const_int(1, true).as_basic_value_enum(),
],
"ptr_in_bounds_expect",
)