From c41da74d1e501a63434f9db90f065dd563c4a609 Mon Sep 17 00:00:00 2001 From: Tatsuyuki Ishi Date: Fri, 19 Jul 2019 10:49:55 +0900 Subject: [PATCH 1/2] Fix SIGILL on nightly rustc --- x11-dl/src/link.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/x11-dl/src/link.rs b/x11-dl/src/link.rs index bf1c89e..c3213e7 100644 --- a/x11-dl/src/link.rs +++ b/x11-dl/src/link.rs @@ -55,12 +55,11 @@ macro_rules! x11_link { unsafe { let libdir = $crate::link::config::libdir::$pkg_name; let lib = try!($crate::link::DynamicLibrary::open_multi(libdir, &[$($lib_name),*])); - let mut this: ::std::mem::ManuallyDrop<$struct_name> - = ::std::mem::uninitialized(); - let this_ptr = &mut this as *mut _ as *mut $struct_name; + let mut this = ::std::mem::MaybeUninit::<$struct_name>::uninit(); + let this_ptr = this.as_mut_ptr(); ::std::ptr::write(&mut (*this_ptr).lib, lib); try!(Self::init(this_ptr)); - Ok(::std::mem::ManuallyDrop::into_inner(this)) + Ok(this.assume_init()) } } } From e9cc5bbf311c6dbd0295b18cd413efbfa0d9d695 Mon Sep 17 00:00:00 2001 From: Tatsuyuki Ishi Date: Mon, 22 Jul 2019 17:47:07 +0900 Subject: [PATCH 2/2] Swtich to maybe-uninit for backward compatibility --- x11-dl/Cargo.toml | 1 + x11-dl/src/lib.rs | 1 + x11-dl/src/link.rs | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/x11-dl/Cargo.toml b/x11-dl/Cargo.toml index fd11faa..550c7c1 100644 --- a/x11-dl/Cargo.toml +++ b/x11-dl/Cargo.toml @@ -15,6 +15,7 @@ workspace = ".." [dependencies] lazy_static = "1" libc = "0.2" +maybe-uninit = "2.0.0" [build-dependencies] pkg-config = "0.3.8" diff --git a/x11-dl/src/lib.rs b/x11-dl/src/lib.rs index cef9ceb..65a89e6 100644 --- a/x11-dl/src/lib.rs +++ b/x11-dl/src/lib.rs @@ -10,6 +10,7 @@ extern crate lazy_static; extern crate libc; +extern crate maybe_uninit; #[macro_use] mod link; diff --git a/x11-dl/src/link.rs b/x11-dl/src/link.rs index c3213e7..6a8613c 100644 --- a/x11-dl/src/link.rs +++ b/x11-dl/src/link.rs @@ -55,7 +55,7 @@ macro_rules! x11_link { unsafe { let libdir = $crate::link::config::libdir::$pkg_name; let lib = try!($crate::link::DynamicLibrary::open_multi(libdir, &[$($lib_name),*])); - let mut this = ::std::mem::MaybeUninit::<$struct_name>::uninit(); + let mut this = ::maybe_uninit::MaybeUninit::<$struct_name>::uninit(); let this_ptr = this.as_mut_ptr(); ::std::ptr::write(&mut (*this_ptr).lib, lib); try!(Self::init(this_ptr));