diff options
author | github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 2023-02-07 15:14:26 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-07 15:14:26 +0000 |
commit | 75ec12d1bb5f8b2e83d0548edd9982a1e7746639 (patch) | |
tree | c2775e75c393aab280598bb763db52d4859ccc3d /bindgen-integration/src/lib.rs | |
parent | 3267ffc1ba88578607e0ea584896f2f1141cedf9 (diff) | |
parent | 2be14a33451b0259bfed8e0fe517502e46fab7b6 (diff) |
Diffstat (limited to 'bindgen-integration/src/lib.rs')
-rwxr-xr-x | bindgen-integration/src/lib.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/bindgen-integration/src/lib.rs b/bindgen-integration/src/lib.rs index 43f71580..e89351c3 100755 --- a/bindgen-integration/src/lib.rs +++ b/bindgen-integration/src/lib.rs @@ -4,6 +4,10 @@ mod bindings { include!(concat!(env!("OUT_DIR"), "/test.rs")); } +mod extern_bindings { + include!(concat!(env!("OUT_DIR"), "/extern.rs")); +} + use std::ffi::CStr; use std::mem; use std::os::raw::c_int; @@ -286,3 +290,35 @@ fn test_custom_derive() { assert!(meter < lightyear); assert!(meter > micron); } + +#[test] +fn test_wrap_static_fns() { + // GH-1090: https://github.com/rust-lang/rust-bindgen/issues/1090 + unsafe { + let f = extern_bindings::foo(); + assert_eq!(11, f); + + let b = extern_bindings::bar(); + assert_eq!(1, b); + + let t = extern_bindings::takes_ptr(&mut 1); + assert_eq!(2, t); + + extern "C" fn function(x: i32) -> i32 { + x + 1 + } + + let tp = extern_bindings::takes_fn_ptr(Some(function)); + assert_eq!(2, tp); + + let tf = extern_bindings::takes_fn(Some(function)); + assert_eq!(3, tf); + + let ta = extern_bindings::takes_alias(Some(function)); + assert_eq!(4, ta); + + let tq = + extern_bindings::takes_qualified(&(&5 as *const _) as *const _); + assert_eq!(5, tq); + } +} |