| author | |
| committer | |
| log | 36c4037144bdc3d80530205c0e2e9c31bee0f114 |
| tree | 429c38d0a7dd42818f4d6810a110f863eaff21d3 |
| parent | 7813068e218457b074576d3dac8926b7923f97ba |
2 files changed, 104 insertions(+), 0 deletions(-)
test/stage1/c_abi/cfuncs.c+52| ... | ... | @@ -24,6 +24,16 @@ void zig_f32(float); |
| 24 | 24 | void zig_f64(double); |
| 25 | 25 | void zig_five_floats(float, float, float, float, float); |
| 26 | 26 | |
| 27 | bool zig_ret_bool(); | |
| 28 | uint8_t zig_ret_u8(); | |
| 29 | uint16_t zig_ret_u16(); | |
| 30 | uint32_t zig_ret_u32(); | |
| 31 | uint64_t zig_ret_u64(); | |
| 32 | int8_t zig_ret_i8(); | |
| 33 | int16_t zig_ret_i16(); | |
| 34 | int32_t zig_ret_i32(); | |
| 35 | int64_t zig_ret_i64(); | |
| 36 | ||
| 27 | 37 | void zig_ptr(void *); |
| 28 | 38 | |
| 29 | 39 | void zig_bool(bool); |
| ... | ... | @@ -119,6 +129,20 @@ void run_c_tests(void) { |
| 119 | 129 | assert_or_panic(res.d == 23); |
| 120 | 130 | assert_or_panic(res.e == 24); |
| 121 | 131 | } |
| 132 | ||
| 133 | { | |
| 134 | assert_or_panic(zig_ret_bool() == 1); | |
| 135 | ||
| 136 | assert_or_panic(zig_ret_u8() == 0xff); | |
| 137 | assert_or_panic(zig_ret_u16() == 0xffff); | |
| 138 | assert_or_panic(zig_ret_u32() == 0xffffffff); | |
| 139 | assert_or_panic(zig_ret_u64() == 0xffffffffffffffff); | |
| 140 | ||
| 141 | assert_or_panic(zig_ret_i8() == -1); | |
| 142 | assert_or_panic(zig_ret_i16() == -1); | |
| 143 | assert_or_panic(zig_ret_i32() == -1); | |
| 144 | assert_or_panic(zig_ret_i64() == -1); | |
| 145 | } | |
| 122 | 146 | } |
| 123 | 147 | |
| 124 | 148 | void c_u8(uint8_t x) { |
| ... | ... | @@ -236,3 +260,31 @@ void c_big_struct_floats(Vector5 vec) { |
| 236 | 260 | assert_or_panic(vec.w == 69); |
| 237 | 261 | assert_or_panic(vec.q == 55); |
| 238 | 262 | } |
| 263 | ||
| 264 | bool c_ret_bool() { | |
| 265 | return 1; | |
| 266 | } | |
| 267 | uint8_t c_ret_u8() { | |
| 268 | return 0xff; | |
| 269 | } | |
| 270 | uint16_t c_ret_u16() { | |
| 271 | return 0xffff; | |
| 272 | } | |
| 273 | uint32_t c_ret_u32() { | |
| 274 | return 0xffffffff; | |
| 275 | } | |
| 276 | uint64_t c_ret_u64() { | |
| 277 | return 0xffffffffffffffff; | |
| 278 | } | |
| 279 | int8_t c_ret_i8() { | |
| 280 | return -1; | |
| 281 | } | |
| 282 | int16_t c_ret_i16() { | |
| 283 | return -1; | |
| 284 | } | |
| 285 | int32_t c_ret_i32() { | |
| 286 | return -1; | |
| 287 | } | |
| 288 | int64_t c_ret_i64() { | |
| 289 | return -1; | |
| 290 | } |
test/stage1/c_abi/main.zig+52| ... | ... | @@ -284,3 +284,55 @@ test "C ABI structs of floats as parameter" { |
| 284 | 284 | }; |
| 285 | 285 | c_big_struct_floats(v5); |
| 286 | 286 | } |
| 287 | ||
| 288 | export fn zig_ret_bool() bool { | |
| 289 | return true; | |
| 290 | } | |
| 291 | export fn zig_ret_u8() u8 { | |
| 292 | return 0xff; | |
| 293 | } | |
| 294 | export fn zig_ret_u16() u16 { | |
| 295 | return 0xffff; | |
| 296 | } | |
| 297 | export fn zig_ret_u32() u32 { | |
| 298 | return 0xffffffff; | |
| 299 | } | |
| 300 | export fn zig_ret_u64() u64 { | |
| 301 | return 0xffffffffffffffff; | |
| 302 | } | |
| 303 | export fn zig_ret_i8() i8 { | |
| 304 | return -1; | |
| 305 | } | |
| 306 | export fn zig_ret_i16() i16 { | |
| 307 | return -1; | |
| 308 | } | |
| 309 | export fn zig_ret_i32() i32 { | |
| 310 | return -1; | |
| 311 | } | |
| 312 | export fn zig_ret_i64() i64 { | |
| 313 | return -1; | |
| 314 | } | |
| 315 | ||
| 316 | extern fn c_ret_bool() bool; | |
| 317 | extern fn c_ret_u8() u8; | |
| 318 | extern fn c_ret_u16() u16; | |
| 319 | extern fn c_ret_u32() u32; | |
| 320 | extern fn c_ret_u64() u64; | |
| 321 | extern fn c_ret_i8() i8; | |
| 322 | extern fn c_ret_i16() i16; | |
| 323 | extern fn c_ret_i32() i32; | |
| 324 | extern fn c_ret_i64() i64; | |
| 325 | ||
| 326 | test "C ABI integer return types" { | |
| 327 | expect(c_ret_bool() == true); | |
| 328 | ||
| 329 | expect(c_ret_u8() == 0xff); | |
| 330 | expect(c_ret_u16() == 0xffff); | |
| 331 | expect(c_ret_u32() == 0xffffffff); | |
| 332 | expect(c_ret_u64() == 0xffffffffffffffff); | |
| 333 | ||
| 334 | expect(c_ret_i8() == -1); | |
| 335 | expect(c_ret_i16() == -1); | |
| 336 | expect(c_ret_i32() == -1); | |
| 337 | expect(c_ret_i64() == -1); | |
| 338 | } |