summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_codegen_cranelift/example/std_example.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_codegen_cranelift/example/std_example.rs')
-rw-r--r--compiler/rustc_codegen_cranelift/example/std_example.rs32
1 files changed, 31 insertions, 1 deletions
diff --git a/compiler/rustc_codegen_cranelift/example/std_example.rs b/compiler/rustc_codegen_cranelift/example/std_example.rs
index 1bf0ff64c..490cc2404 100644
--- a/compiler/rustc_codegen_cranelift/example/std_example.rs
+++ b/compiler/rustc_codegen_cranelift/example/std_example.rs
@@ -1,4 +1,12 @@
-#![feature(core_intrinsics, generators, generator_trait, is_sorted, repr_simd)]
+#![feature(
+ core_intrinsics,
+ generators,
+ generator_trait,
+ is_sorted,
+ repr_simd,
+ tuple_trait,
+ unboxed_closures
+)]
#[cfg(target_arch = "x86_64")]
use std::arch::x86_64::*;
@@ -155,12 +163,34 @@ fn main() {
}
foo(I64X2(0, 0));
+
+ transmute_fat_pointer();
+
+ rust_call_abi();
}
fn panic(_: u128) {
panic!();
}
+use std::mem::transmute;
+
+#[cfg(target_pointer_width = "32")]
+type TwoPtrs = i64;
+#[cfg(target_pointer_width = "64")]
+type TwoPtrs = i128;
+
+fn transmute_fat_pointer() -> TwoPtrs {
+ unsafe { transmute::<_, TwoPtrs>("true !") }
+}
+
+extern "rust-call" fn rust_call_abi_callee<T: std::marker::Tuple>(_: T) {}
+
+fn rust_call_abi() {
+ rust_call_abi_callee(());
+ rust_call_abi_callee((1, 2));
+}
+
#[repr(simd)]
struct I64X2(i64, i64);