+
+[dependencies]
+rand = "0.7"
-diff --git a/library/core/tests/ptr.rs b/library/core/tests/ptr.rs
-index 1a6be3a..42dbd59 100644
---- a/library/core/tests/ptr.rs
-+++ b/library/core/tests/ptr.rs
-@@ -250,6 +250,7 @@ fn test_unsized_nonnull() {
- };
- }
-
-+/*
- #[test]
- #[allow(warnings)]
- // Have a symbol for the test below. It doesn’t need to be an actual variadic function, match the
-@@ -277,6 +277,7 @@ pub fn test_variadic_fnptr() {
- let mut s = SipHasher::new();
- assert_eq!(p.hash(&mut s), q.hash(&mut s));
- }
-+*/
-
- #[test]
- fn write_unaligned_drop() {
--
2.21.0 (Apple Git-122)
#![feature(const_ptr_offset)]
#![feature(const_trait_impl)]
#![feature(const_likely)]
+#![feature(core_ffi_c)]
#![feature(core_intrinsics)]
#![feature(core_private_bignum)]
#![feature(core_private_diy_float)]
}
#[test]
-#[allow(warnings)]
-// Have a symbol for the test below. It doesn’t need to be an actual variadic function, match the
-// ABI, or even point to an actual executable code, because the function itself is never invoked.
-#[no_mangle]
+#[cfg(any(unix, windows))] // printf may not be available on other platforms
+#[allow(deprecated)] // For SipHasher
pub fn test_variadic_fnptr() {
+ use core::ffi;
use core::hash::{Hash, SipHasher};
extern "C" {
- fn test_variadic_fnptr(_: u64, ...) -> f64;
+ // This needs to use the correct function signature even though it isn't called as some
+ // codegen backends make it UB to declare a function with multiple conflicting signatures
+ // (like LLVM) while others straight up return an error (like Cranelift).
+ fn printf(_: *const ffi::c_char, ...) -> ffi::c_int;
}
- let p: unsafe extern "C" fn(u64, ...) -> f64 = test_variadic_fnptr;
+ let p: unsafe extern "C" fn(*const ffi::c_char, ...) -> ffi::c_int = printf;
let q = p.clone();
assert_eq!(p, q);
assert!(!(p < q));