diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index 135ea8a5e7cb4..f8d79387644ee 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -227,6 +227,7 @@ #![feature(core_float)] #![feature(core_intrinsics)] #![feature(dropck_parametricity)] +#![feature(drop_types_in_const)] #![feature(float_extras)] #![feature(float_from_str_radix)] #![feature(fnbox)] diff --git a/src/libstd/sys/common/args.rs b/src/libstd/sys/common/args.rs index e877391fb8b56..419e867265059 100644 --- a/src/libstd/sys/common/args.rs +++ b/src/libstd/sys/common/args.rs @@ -45,12 +45,11 @@ mod imp { use prelude::v1::*; use libc::c_char; - use mem; use ffi::CStr; use sys_common::mutex::Mutex; - static mut GLOBAL_ARGS_PTR: usize = 0; + static mut GLOBAL_ARGS: Option>> = None; static LOCK: Mutex = Mutex::new(); pub unsafe fn init(argc: isize, argv: *const *const u8) { @@ -59,32 +58,25 @@ mod imp { }).collect(); LOCK.lock(); - let ptr = get_global_ptr(); - assert!((*ptr).is_none()); - (*ptr) = Some(box args); + assert!(GLOBAL_ARGS.is_none()); + GLOBAL_ARGS = Some(args); LOCK.unlock(); } pub unsafe fn cleanup() { LOCK.lock(); - *get_global_ptr() = None; + GLOBAL_ARGS = None; LOCK.unlock(); } pub fn clone() -> Option>> { unsafe { LOCK.lock(); - let ptr = get_global_ptr(); - let ret = (*ptr).as_ref().map(|s| (**s).clone()); + let ret = GLOBAL_ARGS.clone(); LOCK.unlock(); return ret } } - - fn get_global_ptr() -> *mut Option>>> { - unsafe { mem::transmute(&GLOBAL_ARGS_PTR) } - } - } #[cfg(any(target_os = "macos",