summaryrefslogtreecommitdiff
path: root/bindgen-integration/src/lib.rs
diff options
context:
space:
mode:
authorgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>2023-02-07 15:14:26 +0000
committerGitHub <noreply@github.com>2023-02-07 15:14:26 +0000
commit75ec12d1bb5f8b2e83d0548edd9982a1e7746639 (patch)
treec2775e75c393aab280598bb763db52d4859ccc3d /bindgen-integration/src/lib.rs
parent3267ffc1ba88578607e0ea584896f2f1141cedf9 (diff)
parent2be14a33451b0259bfed8e0fe517502e46fab7b6 (diff)
Diffstat (limited to 'bindgen-integration/src/lib.rs')
-rwxr-xr-xbindgen-integration/src/lib.rs36
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);
+ }
+}