1
0
forked from M-Labs/nac3

[core] Fix type of ndarray.element_type

Should be the element type of the NDArray itself, not the pointer to its
type.
This commit is contained in:
David Mak 2024-08-30 22:31:26 +08:00
parent 122983f11c
commit 9c33c4209c
2 changed files with 7 additions and 5 deletions

View File

@ -461,8 +461,8 @@ fn format_rpc_arg<'ctx>(
let llvm_usize = generator.get_size_type(ctx.ctx); let llvm_usize = generator.get_size_type(ctx.ctx);
let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, arg_ty); let (elem_ty, _) = unpack_ndarray_var_tys(&mut ctx.unifier, arg_ty);
let llvm_arg_ty = let llvm_elem_ty = ctx.get_llvm_type(generator, elem_ty);
NDArrayType::new(generator, ctx.ctx, ctx.get_llvm_type(generator, elem_ty)); let llvm_arg_ty = NDArrayType::new(generator, ctx.ctx, llvm_elem_ty);
let llvm_arg = NDArrayValue::from_ptr_val(arg.into_pointer_value(), llvm_usize, None); let llvm_arg = NDArrayValue::from_ptr_val(arg.into_pointer_value(), llvm_usize, None);
let llvm_usize_sizeof = ctx let llvm_usize_sizeof = ctx
@ -472,7 +472,7 @@ fn format_rpc_arg<'ctx>(
let llvm_pdata_sizeof = ctx let llvm_pdata_sizeof = ctx
.builder .builder
.build_int_truncate_or_bit_cast( .build_int_truncate_or_bit_cast(
llvm_arg_ty.element_type().ptr_type(AddressSpace::default()).size_of(), llvm_elem_ty.ptr_type(AddressSpace::default()).size_of(),
llvm_usize, llvm_usize,
"", "",
) )
@ -630,7 +630,7 @@ fn format_rpc_ret<'ctx>(
let llvm_pdata_sizeof = ctx let llvm_pdata_sizeof = ctx
.builder .builder
.build_int_truncate_or_bit_cast( .build_int_truncate_or_bit_cast(
llvm_ret_ty.element_type().size_of().unwrap(), llvm_elem_ty.ptr_type(AddressSpace::default()).size_of(),
llvm_usize, llvm_usize,
"", "",
) )

View File

@ -1250,11 +1250,13 @@ impl<'ctx> NDArrayType<'ctx> {
/// Returns the element type of this `ndarray` type. /// Returns the element type of this `ndarray` type.
#[must_use] #[must_use]
pub fn element_type(&self) -> BasicTypeEnum<'ctx> { pub fn element_type(&self) -> AnyTypeEnum<'ctx> {
self.as_base_type() self.as_base_type()
.get_element_type() .get_element_type()
.into_struct_type() .into_struct_type()
.get_field_type_at_index(2) .get_field_type_at_index(2)
.map(BasicTypeEnum::into_pointer_type)
.map(PointerType::get_element_type)
.unwrap() .unwrap()
} }
} }