Skip to content

Commit 82b9ed0

Browse files
committed
Update output of fn_ptr_stdlib_compare
1 parent 81581df commit 82b9ed0

3 files changed

Lines changed: 74 additions & 19 deletions

File tree

tests/unit/fn_ptr_stdlib_compare.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,22 @@
22
#include <stdio.h>
33
#include <stdlib.h>
44

5-
typedef size_t (*read_fn)(void *, size_t, size_t, FILE *);
5+
typedef size_t (*fread_t)(void *, size_t, size_t, FILE *);
66

7-
typedef size_t (*read_alternative_fn)(char *, size_t, size_t, void *);
7+
typedef size_t (*fread_alternative_t)(char *, size_t, size_t, void *);
8+
9+
size_t my_alternative_fread(char *p, size_t n, size_t m, void *f) { return 22; }
810

911
int main() {
10-
read_fn rfn = fread;
11-
assert(rfn == fread);
12-
assert(rfn != nullptr);
12+
fread_t fn1 = fread;
13+
assert(fn1 == fread);
14+
assert(fn1 != nullptr);
15+
16+
fread_alternative_t fn2 = (fread_alternative_t)fread;
17+
assert(fn1 == (fread_t)fn2);
1318

14-
read_alternative_fn rfn2 = (read_alternative_fn)fread;
15-
assert(rfn == (read_fn)rfn2);
19+
fread_t f3 = (fread_t)my_alternative_fread;
20+
assert((*f3)(nullptr, 0, 0, nullptr) == 22);
1621

1722
return 0;
1823
}

tests/unit/out/refcount/fn_ptr_stdlib_compare.rs

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,31 @@ use std::io::Seek;
77
use std::io::{Read, Write};
88
use std::os::fd::AsFd;
99
use std::rc::{Rc, Weak};
10+
pub fn my_alternative_fread_0(p: Ptr<u8>, n: u64, m: u64, f: AnyPtr) -> u64 {
11+
let p: Value<Ptr<u8>> = Rc::new(RefCell::new(p));
12+
let n: Value<u64> = Rc::new(RefCell::new(n));
13+
let m: Value<u64> = Rc::new(RefCell::new(m));
14+
let f: Value<AnyPtr> = Rc::new(RefCell::new(f));
15+
return 22_u64;
16+
}
1017
pub fn main() {
1118
std::process::exit(main_0());
1219
}
1320
fn main_0() -> i32 {
14-
let rfn: Value<FnPtr<fn(AnyPtr, u64, u64, Ptr<::std::fs::File>) -> u64>> =
21+
let fn1: Value<FnPtr<fn(AnyPtr, u64, u64, Ptr<::std::fs::File>) -> u64>> =
1522
Rc::new(RefCell::new(fn_ptr!(
1623
rules::stdio_tgt_refcount::f5,
1724
fn(AnyPtr, u64, u64, Ptr<::std::fs::File>) -> u64
1825
)));
1926
assert!({
20-
let _lhs = (*rfn.borrow()).clone();
27+
let _lhs = (*fn1.borrow()).clone();
2128
_lhs == fn_ptr!(
2229
rules::stdio_tgt_refcount::f5,
2330
fn(AnyPtr, u64, u64, Ptr<::std::fs::File>) -> u64
2431
)
2532
});
26-
assert!(!((*rfn.borrow()).is_null()));
27-
let rfn2: Value<FnPtr<fn(Ptr<u8>, u64, u64, AnyPtr) -> u64>> = Rc::new(RefCell::new(
33+
assert!(!((*fn1.borrow()).is_null()));
34+
let fn2: Value<FnPtr<fn(Ptr<u8>, u64, u64, AnyPtr) -> u64>> = Rc::new(RefCell::new(
2835
fn_ptr!(
2936
rules::stdio_tgt_refcount::f5,
3037
fn(AnyPtr, u64, u64, Ptr<::std::fs::File>) -> u64
@@ -41,9 +48,30 @@ fn main_0() -> i32 {
4148
)),
4249
));
4350
assert!({
44-
let _lhs = (*rfn.borrow()).clone();
45-
_lhs == ((*rfn2.borrow()).cast::<fn(AnyPtr, u64, u64, Ptr<::std::fs::File>) -> u64>(None))
51+
let _lhs = (*fn1.borrow()).clone();
52+
_lhs == ((*fn2.borrow()).cast::<fn(AnyPtr, u64, u64, Ptr<::std::fs::File>) -> u64>(None))
4653
.clone()
4754
});
55+
let f3: Value<FnPtr<fn(AnyPtr, u64, u64, Ptr<::std::fs::File>) -> u64>> =
56+
Rc::new(RefCell::new(
57+
fn_ptr!(
58+
my_alternative_fread_0,
59+
fn(Ptr::<u8>, u64, u64, AnyPtr) -> u64
60+
)
61+
.cast::<fn(AnyPtr, u64, u64, Ptr<::std::fs::File>) -> u64>(Some(
62+
(|a0: AnyPtr, a1: u64, a2: u64, a3: Ptr<::std::fs::File>| -> u64 {
63+
my_alternative_fread_0(a0.cast::<u8>().unwrap(), a1, a2, a3.to_any())
64+
}) as fn(AnyPtr, u64, u64, Ptr<::std::fs::File>) -> u64,
65+
)),
66+
));
67+
assert!(
68+
(({
69+
let _arg0: AnyPtr = Default::default();
70+
let _arg1: u64 = 0_u64;
71+
let _arg2: u64 = 0_u64;
72+
let _arg3: Ptr<::std::fs::File> = Default::default();
73+
(*(*f3.borrow()))(_arg0, _arg1, _arg2, _arg3)
74+
}) == 22_u64)
75+
);
4876
return 0;
4977
}

tests/unit/out/unsafe/fn_ptr_stdlib_compare.rs

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,49 @@ use std::io::Seek;
77
use std::io::{Read, Write};
88
use std::os::fd::{AsFd, FromRawFd, IntoRawFd};
99
use std::rc::Rc;
10+
pub unsafe fn my_alternative_fread_0(
11+
mut p: *mut u8,
12+
mut n: u64,
13+
mut m: u64,
14+
mut f: *mut ::libc::c_void,
15+
) -> u64 {
16+
return 22_u64;
17+
}
1018
pub fn main() {
1119
unsafe {
1220
std::process::exit(main_0() as i32);
1321
}
1422
}
1523
unsafe fn main_0() -> i32 {
16-
let mut rfn: Option<unsafe fn(*mut ::libc::c_void, u64, u64, *mut ::std::fs::File) -> u64> =
24+
let mut fn1: Option<unsafe fn(*mut ::libc::c_void, u64, u64, *mut ::std::fs::File) -> u64> =
1725
Some(rules::stdio_tgt_unsafe::f5);
18-
assert!(((rfn) == (Some(rules::stdio_tgt_unsafe::f5))));
19-
assert!(!((rfn).is_none()));
20-
let mut rfn2: Option<unsafe fn(*mut u8, u64, u64, *mut ::libc::c_void) -> u64> =
26+
assert!(((fn1) == (Some(rules::stdio_tgt_unsafe::f5))));
27+
assert!(!((fn1).is_none()));
28+
let mut fn2: Option<unsafe fn(*mut u8, u64, u64, *mut ::libc::c_void) -> u64> =
2129
std::mem::transmute::<
2230
Option<unsafe fn(*mut ::libc::c_void, u64, u64, *mut ::std::fs::File) -> u64>,
2331
Option<unsafe fn(*mut u8, u64, u64, *mut ::libc::c_void) -> u64>,
2432
>(Some(rules::stdio_tgt_unsafe::f5));
2533
assert!(
26-
((rfn)
34+
((fn1)
2735
== (std::mem::transmute::<
2836
Option<unsafe fn(*mut u8, u64, u64, *mut ::libc::c_void) -> u64>,
2937
Option<unsafe fn(*mut ::libc::c_void, u64, u64, *mut ::std::fs::File) -> u64>,
30-
>(rfn2)))
38+
>(fn2)))
39+
);
40+
let mut f3: Option<unsafe fn(*mut ::libc::c_void, u64, u64, *mut ::std::fs::File) -> u64> =
41+
std::mem::transmute::<
42+
Option<unsafe fn(*mut u8, u64, u64, *mut ::libc::c_void) -> u64>,
43+
Option<unsafe fn(*mut ::libc::c_void, u64, u64, *mut ::std::fs::File) -> u64>,
44+
>(Some(my_alternative_fread_0));
45+
assert!(
46+
((unsafe {
47+
let _arg0: *mut ::libc::c_void = Default::default();
48+
let _arg1: u64 = 0_u64;
49+
let _arg2: u64 = 0_u64;
50+
let _arg3: *mut ::std::fs::File = Default::default();
51+
(f3).unwrap()(_arg0, _arg1, _arg2, _arg3)
52+
}) == (22_u64))
3153
);
3254
return 0;
3355
}

0 commit comments

Comments
 (0)