X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Frt%2Frust_test_helpers.c;h=320cd3dbd851a4e638f5c008da30c4de74413c46;hb=46dcffd05b46e62c27629f4231fc794e94e614a8;hp=c755cf67caa9f6b52dad2e8007673b6fc1bd8f94;hpb=ca3e557ee8a6451847b3bf6024175a2fe4601737;p=rust.git diff --git a/src/rt/rust_test_helpers.c b/src/rt/rust_test_helpers.c index c755cf67caa..320cd3dbd85 100644 --- a/src/rt/rust_test_helpers.c +++ b/src/rt/rust_test_helpers.c @@ -12,6 +12,7 @@ #include #include +#include // These functions are used in the unit tests for C ABI calls. @@ -135,6 +136,8 @@ struct ManyInts { struct TwoU8s arg6; }; +// MSVC doesn't allow empty structs or unions +#ifndef _MSC_VER struct Empty { }; @@ -148,6 +151,7 @@ rust_dbg_extern_empty_struct(struct ManyInts v1, struct Empty e, struct ManyInts assert(v1.arg6.one == v2.arg6.one + 1); assert(v1.arg6.two == v2.arg6.two + 1); } +#endif intptr_t rust_get_test_int() { @@ -191,9 +195,7 @@ rust_dbg_abi_2(struct floats f) { } int -rust_dbg_static_mut; - -int rust_dbg_static_mut = 3; +rust_dbg_static_mut = 3; void rust_dbg_static_mut_check_four() { @@ -217,3 +219,22 @@ uint64_t get_y(struct S s) { uint64_t get_z(struct S s) { return s.z; } + +uint64_t get_c_many_params(void *a, void *b, void *c, void *d, struct quad f) { + return f.c; +} + +// Calculates the average of `(x + y) / n` where x: i64, y: f64. There must be exactly n pairs +// passed as variadic arguments. +double rust_interesting_average(uint64_t n, ...) { + va_list pairs; + double sum = 0.0; + int i; + va_start(pairs, n); + for(i = 0; i < n; i += 1) { + sum += (double)va_arg(pairs, int64_t); + sum += va_arg(pairs, double); + } + va_end(pairs); + return sum / n; +}