diff options
| author | bors <bors@rust-lang.org> | 2022-03-23 00:50:33 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-03-23 00:50:33 +0000 |
| commit | 2b50739b4978936750a0c8de404ff184e49114f9 (patch) | |
| tree | dbbb6817b05c9098348e748139f5f4315ac245cf | |
| parent | a4a5e79814fb4d1568fb0ea5ca50f810b071ae12 (diff) | |
| parent | 4af755baf5daff426189a5a61be93610fa19dca7 (diff) | |
| download | rust-2b50739b4978936750a0c8de404ff184e49114f9.tar.gz rust-2b50739b4978936750a0c8de404ff184e49114f9.zip | |
Auto merge of #95088 - bjorn3:fix_test_variadic_fnptr, r=dtolnay
Don't declare test_variadic_fnptr with two conflicting signatures It is UB for LLVM and results in a compile error for Cranelift. cc https://github.com/bjorn3/rustc_codegen_cranelift/issues/806 Fixes https://github.com/rust-lang/rust/issues/66690
| -rw-r--r-- | compiler/rustc_codegen_cranelift/patches/0022-sysroot-Disable-not-compiling-tests.patch | 20 | ||||
| -rw-r--r-- | library/core/tests/lib.rs | 1 | ||||
| -rw-r--r-- | library/core/tests/ptr.rs | 14 |
3 files changed, 9 insertions, 26 deletions
diff --git a/compiler/rustc_codegen_cranelift/patches/0022-sysroot-Disable-not-compiling-tests.patch b/compiler/rustc_codegen_cranelift/patches/0022-sysroot-Disable-not-compiling-tests.patch index 108a97bd7c6..8d9ee3f25c4 100644 --- a/compiler/rustc_codegen_cranelift/patches/0022-sysroot-Disable-not-compiling-tests.patch +++ b/compiler/rustc_codegen_cranelift/patches/0022-sysroot-Disable-not-compiling-tests.patch @@ -30,25 +30,5 @@ index 0000000..46fd999 + +[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) diff --git a/library/core/tests/lib.rs b/library/core/tests/lib.rs index dc374022827..5c861236e86 100644 --- a/library/core/tests/lib.rs +++ b/library/core/tests/lib.rs @@ -23,6 +23,7 @@ #![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)] diff --git a/library/core/tests/ptr.rs b/library/core/tests/ptr.rs index af8e78f1f4e..750e7295fb5 100644 --- a/library/core/tests/ptr.rs +++ b/library/core/tests/ptr.rs @@ -289,16 +289,18 @@ fn test_const_nonnull_new() { } #[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(unix)] // 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)); |
