]> git.lizzy.rs Git - rust.git/blob - tests/codegen/some-abis-do-extend-params-to-32-bits.rs
Rollup merge of #107700 - jyn514:tools-builder, r=Mark-Simulacrum
[rust.git] / tests / codegen / some-abis-do-extend-params-to-32-bits.rs
1 // compile-flags: -Cno-prepopulate-passes -Copt-level=0
2
3 // revisions:x86_64 i686 aarch64-apple aarch64-windows aarch64-linux arm riscv
4
5 //[x86_64] compile-flags: --target x86_64-unknown-uefi
6 //[x86_64] needs-llvm-components: x86
7 //[i686] compile-flags: --target i686-unknown-linux-musl
8 //[i686] needs-llvm-components: x86
9 //[aarch64-windows] compile-flags: --target aarch64-pc-windows-msvc
10 //[aarch64-windows] needs-llvm-components: aarch64
11 //[aarch64-linux] compile-flags: --target aarch64-unknown-linux-gnu
12 //[aarch64-linux] needs-llvm-components: aarch64
13 //[aarch64-apple] compile-flags: --target aarch64-apple-darwin
14 //[aarch64-apple] needs-llvm-components: aarch64
15 //[arm] compile-flags: --target armv7r-none-eabi
16 //[arm] needs-llvm-components: arm
17 //[riscv] compile-flags: --target riscv64gc-unknown-none-elf
18 //[riscv] needs-llvm-components: riscv
19
20 // See bottom of file for a corresponding C source file that is meant to yield
21 // equivalent declarations.
22 #![feature(no_core, lang_items)]
23 #![crate_type = "lib"]
24 #![no_std]
25 #![no_core]
26
27 #[lang="sized"] trait Sized { }
28 #[lang="freeze"] trait Freeze { }
29 #[lang="copy"] trait Copy { }
30
31 // The patterns in this file are written in the style of a table to make the
32 // uniformities and distinctions more apparent.
33 //
34 //                  ZERO/SIGN-EXTENDING TO 32 BITS            NON-EXTENDING
35 //                  ==============================  =======================
36 // x86_64:          void @c_arg_u8(i8 zeroext %_a)
37 // i686:            void @c_arg_u8(i8 zeroext %_a)
38 // aarch64-apple:   void @c_arg_u8(i8 zeroext %_a)
39 // aarch64-windows:                                  void @c_arg_u8(i8 %_a)
40 // aarch64-linux:                                    void @c_arg_u8(i8 %_a)
41 // arm:             void @c_arg_u8(i8 zeroext %_a)
42 // riscv:           void @c_arg_u8(i8 zeroext %_a)
43 #[no_mangle] pub extern "C" fn c_arg_u8(_a: u8) { }
44
45 // x86_64:          void @c_arg_u16(i16 zeroext %_a)
46 // i686:            void @c_arg_u16(i16 zeroext %_a)
47 // aarch64-apple:   void @c_arg_u16(i16 zeroext %_a)
48 // aarch64-windows:                                 void @c_arg_u16(i16 %_a)
49 // aarch64-linux:                                   void @c_arg_u16(i16 %_a)
50 // arm:             void @c_arg_u16(i16 zeroext %_a)
51 // riscv:           void @c_arg_u16(i16 zeroext %_a)
52 #[no_mangle] pub extern "C" fn c_arg_u16(_a: u16) { }
53
54 // x86_64:          void @c_arg_u32(i32 %_a)
55 // i686:            void @c_arg_u32(i32 %_a)
56 // aarch64-apple:   void @c_arg_u32(i32 %_a)
57 // aarch64-windows:                                 void @c_arg_u32(i32 %_a)
58 // aarch64-linux:                                   void @c_arg_u32(i32 %_a)
59 // arm:             void @c_arg_u32(i32 %_a)
60 // riscv:           void @c_arg_u32(i32 signext %_a)
61 #[no_mangle] pub extern "C" fn c_arg_u32(_a: u32) { }
62
63 // x86_64:          void @c_arg_u64(i64 %_a)
64 // i686:            void @c_arg_u64(i64 %_a)
65 // aarch64-apple:   void @c_arg_u64(i64 %_a)
66 // aarch64-windows:                                 void @c_arg_u64(i64 %_a)
67 // aarch64-linux:                                   void @c_arg_u64(i64 %_a)
68 // arm:             void @c_arg_u64(i64 %_a)
69 // riscv:           void @c_arg_u64(i64 %_a)
70 #[no_mangle] pub extern "C" fn c_arg_u64(_a: u64) { }
71
72 // x86_64:          void @c_arg_i8(i8 signext %_a)
73 // i686:            void @c_arg_i8(i8 signext %_a)
74 // aarch64-apple:   void @c_arg_i8(i8 signext %_a)
75 // aarch64-windows:                                  void @c_arg_i8(i8 %_a)
76 // aarch64-linux:                                    void @c_arg_i8(i8 %_a)
77 // arm:             void @c_arg_i8(i8 signext %_a)
78 // riscv:           void @c_arg_i8(i8 signext %_a)
79 #[no_mangle] pub extern "C" fn c_arg_i8(_a: i8) { }
80
81 // x86_64:          void @c_arg_i16(i16 signext %_a)
82 // i686:            void @c_arg_i16(i16 signext %_a)
83 // aarch64-apple:   void @c_arg_i16(i16 signext %_a)
84 // aarch64-windows:                                 void @c_arg_i16(i16 %_a)
85 // aarch64-linux:                                   void @c_arg_i16(i16 %_a)
86 // arm:             void @c_arg_i16(i16 signext %_a)
87 // riscv:           void @c_arg_i16(i16 signext %_a)
88 #[no_mangle] pub extern "C" fn c_arg_i16(_a: i16) { }
89
90 // x86_64:          void @c_arg_i32(i32 %_a)
91 // i686:            void @c_arg_i32(i32 %_a)
92 // aarch64-apple:   void @c_arg_i32(i32 %_a)
93 // aarch64-windows:                                 void @c_arg_i32(i32 %_a)
94 // aarch64-linux:                                   void @c_arg_i32(i32 %_a)
95 // arm:             void @c_arg_i32(i32 %_a)
96 // riscv:           void @c_arg_i32(i32 signext %_a)
97 #[no_mangle] pub extern "C" fn c_arg_i32(_a: i32) { }
98
99 // x86_64:          void @c_arg_i64(i64 %_a)
100 // i686:            void @c_arg_i64(i64 %_a)
101 // aarch64-apple:   void @c_arg_i64(i64 %_a)
102 // aarch64-windows:                                 void @c_arg_i64(i64 %_a)
103 // aarch64-linux:                                   void @c_arg_i64(i64 %_a)
104 // arm:             void @c_arg_i64(i64 %_a)
105 // riscv:           void @c_arg_i64(i64 %_a)
106 #[no_mangle] pub extern "C" fn c_arg_i64(_a: i64) { }
107
108 // x86_64:          zeroext i8 @c_ret_u8()
109 // i686:            zeroext i8 @c_ret_u8()
110 // aarch64-apple:   zeroext i8 @c_ret_u8()
111 // aarch64-windows:                                 i8 @c_ret_u8()
112 // aarch64-linux:                                   i8 @c_ret_u8()
113 // arm:             zeroext i8 @c_ret_u8()
114 // riscv:           zeroext i8 @c_ret_u8()
115 #[no_mangle] pub extern "C" fn c_ret_u8() -> u8 { 0 }
116
117 // x86_64:          zeroext i16 @c_ret_u16()
118 // i686:            zeroext i16 @c_ret_u16()
119 // aarch64-apple:   zeroext i16 @c_ret_u16()
120 // aarch64-windows:                                 i16 @c_ret_u16()
121 // aarch64-linux:                                   i16 @c_ret_u16()
122 // arm:             zeroext i16 @c_ret_u16()
123 // riscv:           zeroext i16 @c_ret_u16()
124 #[no_mangle] pub extern "C" fn c_ret_u16() -> u16 { 0 }
125
126 // x86_64:          i32 @c_ret_u32()
127 // i686:            i32 @c_ret_u32()
128 // aarch64-apple:   i32 @c_ret_u32()
129 // aarch64-windows:                                 i32 @c_ret_u32()
130 // aarch64-linux:                                   i32 @c_ret_u32()
131 // arm:             i32 @c_ret_u32()
132 // riscv:           signext i32 @c_ret_u32()
133 #[no_mangle] pub extern "C" fn c_ret_u32() -> u32 { 0 }
134
135 // x86_64:          i64 @c_ret_u64()
136 // i686:            i64 @c_ret_u64()
137 // aarch64-apple:   i64 @c_ret_u64()
138 // aarch64-windows:                                 i64 @c_ret_u64()
139 // aarch64-linux:                                   i64 @c_ret_u64()
140 // arm:             i64 @c_ret_u64()
141 // riscv:           i64 @c_ret_u64()
142 #[no_mangle] pub extern "C" fn c_ret_u64() -> u64 { 0 }
143
144 // x86_64:          signext i8 @c_ret_i8()
145 // i686:            signext i8 @c_ret_i8()
146 // aarch64-apple:   signext i8 @c_ret_i8()
147 // aarch64-windows:                                 i8 @c_ret_i8()
148 // aarch64-linux:                                   i8 @c_ret_i8()
149 // arm:             signext i8 @c_ret_i8()
150 // riscv:           signext i8 @c_ret_i8()
151 #[no_mangle] pub extern "C" fn c_ret_i8() -> i8 { 0 }
152
153 // x86_64:          signext i16 @c_ret_i16()
154 // i686:            signext i16 @c_ret_i16()
155 // aarch64-apple:   signext i16 @c_ret_i16()
156 // aarch64-windows:                                 i16 @c_ret_i16()
157 // aarch64-linux:                                   i16 @c_ret_i16()
158 // arm:             signext i16 @c_ret_i16()
159 // riscv:           signext i16 @c_ret_i16()
160 #[no_mangle] pub extern "C" fn c_ret_i16() -> i16 { 0 }
161
162 // x86_64:          i32 @c_ret_i32()
163 // i686:            i32 @c_ret_i32()
164 // aarch64-apple:   i32 @c_ret_i32()
165 // aarch64-windows:                                 i32 @c_ret_i32()
166 // aarch64-linux:                                   i32 @c_ret_i32()
167 // arm:             i32 @c_ret_i32()
168 // riscv:           signext i32 @c_ret_i32()
169 #[no_mangle] pub extern "C" fn c_ret_i32() -> i32 { 0 }
170
171 // x86_64:          i64 @c_ret_i64()
172 // i686:            i64 @c_ret_i64()
173 // aarch64-apple:   i64 @c_ret_i64()
174 // aarch64-windows:                                 i64 @c_ret_i64()
175 // aarch64-linux:                                   i64 @c_ret_i64()
176 // arm:             i64 @c_ret_i64()
177 // riscv:           i64 @c_ret_i64()
178 #[no_mangle] pub extern "C" fn c_ret_i64() -> i64 { 0 }
179
180 const C_SOURCE_FILE: &'static str = r##"
181 #include <stdlib.h>
182 #include <stdint.h>
183 #include <stdio.h>
184
185 void c_arg_u8(uint8_t _a) { }
186 void c_arg_u16(uint16_t _a) { }
187 void c_arg_u32(uint32_t _a) { }
188 void c_arg_u64(uint64_t _a) { }
189
190 void c_arg_i8(int8_t _a) { }
191 void c_arg_i16(int16_t _a) { }
192 void c_arg_i32(int32_t _a) { }
193 void c_arg_i64(int64_t _a) { }
194
195 uint8_t  c_ret_u8()  { return 0; }
196 uint16_t c_ret_u16() { return 0; }
197 uint32_t c_ret_u32() { return 0; }
198 uint64_t c_ret_u64() { return 0; }
199
200 int8_t   c_ret_i8()  { return 0; }
201 int16_t  c_ret_i16() { return 0; }
202 int32_t  c_ret_i32() { return 0; }
203 int64_t  c_ret_i64() { return 0; }
204 "##;