Skip to content

Commit c3ee030

Browse files
committed
Fix passing and returning vector types
1 parent eed1f75 commit c3ee030

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

example/std_example.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(core_intrinsics, generators, generator_trait, is_sorted)]
1+
#![feature(core_intrinsics, generators, generator_trait, is_sorted, repr_simd)]
22

33
#[cfg(target_arch = "x86_64")]
44
use std::arch::x86_64::*;
@@ -153,12 +153,20 @@ fn main() {
153153

154154
enum Never {}
155155
}
156+
157+
foo(I64X2(0, 0));
156158
}
157159

158160
fn panic(_: u128) {
159161
panic!();
160162
}
161163

164+
#[repr(simd)]
165+
struct I64X2(i64, i64);
166+
167+
#[allow(improper_ctypes_definitions)]
168+
extern "C" fn foo(_a: I64X2) {}
169+
162170
#[cfg(target_arch = "x86_64")]
163171
#[target_feature(enable = "sse2")]
164172
unsafe fn test_simd() {

src/value_and_place.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,9 @@ impl<'tcx> CValue<'tcx> {
165165
CValueInner::ByRef(ptr, None) => {
166166
let clif_ty = match layout.abi {
167167
Abi::Scalar(scalar) => scalar_to_clif_type(fx.tcx, scalar),
168+
Abi::Vector { element, count } => scalar_to_clif_type(fx.tcx, element)
169+
.by(u32::try_from(count).unwrap())
170+
.unwrap(),
168171
_ => unreachable!("{:?}", layout.ty),
169172
};
170173
let mut flags = MemFlags::new();

0 commit comments

Comments
 (0)