1 #![crate_type = "staticlib"]
2 #![feature(c_variadic)]
3 #![feature(rustc_private)]
7 use libc
::{c_char, c_double, c_int, c_long, c_longlong}
;
9 use std
::ffi
::{CString, CStr}
;
11 macro_rules
! continue_if
{
19 unsafe fn compare_c_str(ptr
: *const c_char
, val
: &str) -> bool
{
20 let cstr0
= CStr
::from_ptr(ptr
);
21 match CString
::new(val
) {
22 Ok(cstr1
) => &*cstr1
== cstr0
,
28 pub unsafe extern "C" fn check_list_0(mut ap
: VaList
) -> usize {
29 continue_if
!(ap
.arg
::<c_longlong
>() == 1);
30 continue_if
!(ap
.arg
::<c_int
>() == 2);
31 continue_if
!(ap
.arg
::<c_longlong
>() == 3);
36 pub unsafe extern "C" fn check_list_1(mut ap
: VaList
) -> usize {
37 continue_if
!(ap
.arg
::<c_int
>() == -1);
38 continue_if
!(ap
.arg
::<c_char
>() == 'A'
as c_char
);
39 continue_if
!(ap
.arg
::<c_char
>() == '
4'
as c_char
);
40 continue_if
!(ap
.arg
::<c_char
>() == '
;'
as c_char
);
41 continue_if
!(ap
.arg
::<c_int
>() == 0x32);
42 continue_if
!(ap
.arg
::<c_int
>() == 0x10000001);
43 continue_if
!(compare_c_str(ap
.arg
::<*const c_char
>(), "Valid!"));
48 pub unsafe extern "C" fn check_list_2(mut ap
: VaList
) -> usize {
49 continue_if
!(ap
.arg
::<c_double
>().floor() == 3.14f64.floor());
50 continue_if
!(ap
.arg
::<c_long
>() == 12);
51 continue_if
!(ap
.arg
::<c_char
>() == 'a'
as c_char
);
52 continue_if
!(ap
.arg
::<c_double
>().floor() == 6.18f64.floor());
53 continue_if
!(compare_c_str(ap
.arg
::<*const c_char
>(), "Hello"));
54 continue_if
!(ap
.arg
::<c_int
>() == 42);
55 continue_if
!(compare_c_str(ap
.arg
::<*const c_char
>(), "World"));
60 pub unsafe extern "C" fn check_list_copy_0(mut ap
: VaList
) -> usize {
61 continue_if
!(ap
.arg
::<c_double
>().floor() == 6.28f64.floor());
62 continue_if
!(ap
.arg
::<c_int
>() == 16);
63 continue_if
!(ap
.arg
::<c_char
>() == 'A'
as c_char
);
64 continue_if
!(compare_c_str(ap
.arg
::<*const c_char
>(), "Skip Me!"));
65 ap
.with_copy(|mut ap
| {
66 if compare_c_str(ap
.arg
::<*const c_char
>(), "Correct") {
75 pub unsafe extern "C" fn check_varargs_0(_
: c_int
, mut ap
: ...) -> usize {
76 continue_if
!(ap
.arg
::<c_int
>() == 42);
77 continue_if
!(compare_c_str(ap
.arg
::<*const c_char
>(), "Hello, World!"));
82 pub unsafe extern "C" fn check_varargs_1(_
: c_int
, mut ap
: ...) -> usize {
83 continue_if
!(ap
.arg
::<c_double
>().floor() == 3.14f64.floor());
84 continue_if
!(ap
.arg
::<c_long
>() == 12);
85 continue_if
!(ap
.arg
::<c_char
>() == 'A'
as c_char
);
86 continue_if
!(ap
.arg
::<c_longlong
>() == 1);
91 pub unsafe extern "C" fn check_varargs_2(_
: c_int
, _ap
: ...) -> usize {
96 pub unsafe extern "C" fn check_varargs_3(_
: c_int
, mut ap
: ...) -> usize {
97 continue_if
!(ap
.arg
::<c_int
>() == 1);
98 continue_if
!(ap
.arg
::<c_int
>() == 2);
99 continue_if
!(ap
.arg
::<c_int
>() == 3);
100 continue_if
!(ap
.arg
::<c_int
>() == 4);
101 continue_if
!(ap
.arg
::<c_int
>() == 5);
102 continue_if
!(ap
.arg
::<c_int
>() == 6);
103 continue_if
!(ap
.arg
::<c_int
>() == 7);
104 continue_if
!(ap
.arg
::<c_int
>() == 8);
105 continue_if
!(ap
.arg
::<c_int
>() == 9);
106 continue_if
!(ap
.arg
::<c_int
>() == 10);
111 pub unsafe extern "C" fn check_varargs_4(_
: c_double
, mut ap
: ...) -> usize {
112 continue_if
!(ap
.arg
::<c_double
>() == 1.0);
113 continue_if
!(ap
.arg
::<c_double
>() == 2.0);
114 continue_if
!(ap
.arg
::<c_double
>() == 3.0);
115 continue_if
!(ap
.arg
::<c_double
>() == 4.0);
116 continue_if
!(ap
.arg
::<c_double
>() == 5.0);
117 continue_if
!(ap
.arg
::<c_double
>() == 6.0);
118 continue_if
!(ap
.arg
::<c_double
>() == 7.0);
119 continue_if
!(ap
.arg
::<c_double
>() == 8.0);
120 continue_if
!(ap
.arg
::<c_double
>() == 9.0);
121 continue_if
!(ap
.arg
::<c_double
>() == 10.0);
126 pub unsafe extern "C" fn check_varargs_5(_
: c_int
, mut ap
: ...) -> usize {
127 continue_if
!(ap
.arg
::<c_double
>() == 1.0);
128 continue_if
!(ap
.arg
::<c_int
>() == 1);
129 continue_if
!(ap
.arg
::<c_double
>() == 2.0);
130 continue_if
!(ap
.arg
::<c_int
>() == 2);
131 continue_if
!(ap
.arg
::<c_double
>() == 3.0);
132 continue_if
!(ap
.arg
::<c_int
>() == 3);
133 continue_if
!(ap
.arg
::<c_double
>() == 4.0);
134 continue_if
!(ap
.arg
::<c_int
>() == 4);
135 continue_if
!(ap
.arg
::<c_int
>() == 5);
136 continue_if
!(ap
.arg
::<c_double
>() == 5.0);
137 continue_if
!(ap
.arg
::<c_int
>() == 6);
138 continue_if
!(ap
.arg
::<c_double
>() == 6.0);
139 continue_if
!(ap
.arg
::<c_int
>() == 7);
140 continue_if
!(ap
.arg
::<c_double
>() == 7.0);
141 continue_if
!(ap
.arg
::<c_int
>() == 8);
142 continue_if
!(ap
.arg
::<c_double
>() == 8.0);
143 continue_if
!(ap
.arg
::<c_int
>() == 9);
144 continue_if
!(ap
.arg
::<c_double
>() == 9.0);
145 continue_if
!(ap
.arg
::<c_int
>() == 10);
146 continue_if
!(ap
.arg
::<c_double
>() == 10.0);