]> git.lizzy.rs Git - rust.git/blob - tests/run-make/wasm-abi/foo.rs
Rollup merge of #106113 - krasimirgg:llvm-16-ext-tyid, r=nikic
[rust.git] / tests / run-make / wasm-abi / foo.rs
1 #![crate_type = "cdylib"]
2 #![deny(warnings)]
3 #![feature(wasm_abi)]
4
5 #[repr(C)]
6 #[derive(PartialEq, Debug)]
7 pub struct TwoI32 {
8     pub a: i32,
9     pub b: i32,
10 }
11
12 #[no_mangle]
13 pub extern "wasm" fn return_two_i32() -> TwoI32 {
14     TwoI32 { a: 1, b: 2 }
15 }
16
17 #[repr(C)]
18 #[derive(PartialEq, Debug)]
19 pub struct TwoI64 {
20     pub a: i64,
21     pub b: i64,
22 }
23
24 #[no_mangle]
25 pub extern "wasm" fn return_two_i64() -> TwoI64 {
26     TwoI64 { a: 3, b: 4 }
27 }
28
29 #[repr(C)]
30 #[derive(PartialEq, Debug)]
31 pub struct TwoF32 {
32     pub a: f32,
33     pub b: f32,
34 }
35
36 #[no_mangle]
37 pub extern "wasm" fn return_two_f32() -> TwoF32 {
38     TwoF32 { a: 5., b: 6. }
39 }
40
41 #[repr(C)]
42 #[derive(PartialEq, Debug)]
43 pub struct TwoF64 {
44     pub a: f64,
45     pub b: f64,
46 }
47
48 #[no_mangle]
49 pub extern "wasm" fn return_two_f64() -> TwoF64 {
50     TwoF64 { a: 7., b: 8. }
51 }
52
53 #[repr(C)]
54 #[derive(PartialEq, Debug)]
55 pub struct Mishmash {
56     pub a: f64,
57     pub b: f32,
58     pub c: i32,
59     pub d: i64,
60     pub e: TwoI32,
61 }
62
63 #[no_mangle]
64 pub extern "wasm" fn return_mishmash() -> Mishmash {
65     Mishmash { a: 9., b: 10., c: 11, d: 12, e: TwoI32 { a: 13, b: 14 } }
66 }
67
68 #[link(wasm_import_module = "host")]
69 extern "wasm" {
70     fn two_i32() -> TwoI32;
71     fn two_i64() -> TwoI64;
72     fn two_f32() -> TwoF32;
73     fn two_f64() -> TwoF64;
74     fn mishmash() -> Mishmash;
75 }
76
77 #[no_mangle]
78 pub unsafe extern "C" fn call_imports() {
79     assert_eq!(two_i32(), TwoI32 { a: 100, b: 101 });
80     assert_eq!(two_i64(), TwoI64 { a: 102, b: 103 });
81     assert_eq!(two_f32(), TwoF32 { a: 104., b: 105. });
82     assert_eq!(two_f64(), TwoF64 { a: 106., b: 107. });
83     assert_eq!(
84         mishmash(),
85         Mishmash { a: 108., b: 109., c: 110, d: 111, e: TwoI32 { a: 112, b: 113 } }
86     );
87 }