Skip to content

Commit e1e0df8

Browse files
committed
Remove uses of mem::uninitialized in std::sys::cloudabi
Usages still appear in cloudabi tests and in the reentrant mutex implementation
1 parent e649e90 commit e1e0df8

File tree

4 files changed

+31
-16
lines changed

4 files changed

+31
-16
lines changed

src/libstd/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@
273273
#![feature(link_args)]
274274
#![feature(linkage)]
275275
#![feature(maybe_uninit_ref)]
276+
#![feature(maybe_uninit_slice)]
276277
#![feature(mem_take)]
277278
#![feature(needs_panic_runtime)]
278279
#![feature(never_type)]

src/libstd/sys/cloudabi/condvar.rs

+20-9
Original file line numberDiff line numberDiff line change
@@ -79,16 +79,21 @@ impl Condvar {
7979
},
8080
..mem::zeroed()
8181
};
82-
let mut event: abi::event = mem::uninitialized();
83-
let mut nevents: usize = mem::uninitialized();
84-
let ret = abi::poll(&subscription, &mut event, 1, &mut nevents);
82+
let mut event: mem::MaybeUninit<abi::event> = mem::MaybeUninit::uninit();
83+
let mut nevents: mem::MaybeUninit<usize> = mem::MaybeUninit::uninit();
84+
let ret = abi::poll(
85+
&subscription,
86+
event.as_mut_ptr(),
87+
1,
88+
nevents.get_mut()
89+
);
8590
assert_eq!(
8691
ret,
8792
abi::errno::SUCCESS,
8893
"Failed to wait on condition variable"
8994
);
9095
assert_eq!(
91-
event.error,
96+
event.assume_init().error,
9297
abi::errno::SUCCESS,
9398
"Failed to wait on condition variable"
9499
);
@@ -131,21 +136,27 @@ impl Condvar {
131136
..mem::zeroed()
132137
},
133138
];
134-
let mut events: [abi::event; 2] = mem::uninitialized();
135-
let mut nevents: usize = mem::uninitialized();
136-
let ret = abi::poll(subscriptions.as_ptr(), events.as_mut_ptr(), 2, &mut nevents);
139+
let mut events: [mem::MaybeUninit<abi::event>; 2] = [mem::MaybeUninit::uninit(); 2];
140+
let mut nevents: mem::MaybeUninit<usize> = mem::MaybeUninit::uninit();
141+
let ret = abi::poll(
142+
subscriptions.as_ptr(),
143+
mem::MaybeUninit::first_ptr_mut(&mut events),
144+
2,
145+
nevents.get_mut()
146+
);
137147
assert_eq!(
138148
ret,
139149
abi::errno::SUCCESS,
140150
"Failed to wait on condition variable"
141151
);
152+
let nevents = nevents.assume_init();
142153
for i in 0..nevents {
143154
assert_eq!(
144-
events[i].error,
155+
events[i].assume_init().error,
145156
abi::errno::SUCCESS,
146157
"Failed to wait on condition variable"
147158
);
148-
if events[i].type_ == abi::eventtype::CONDVAR {
159+
if events[i].assume_init().type_ == abi::eventtype::CONDVAR {
149160
return true;
150161
}
151162
}

src/libstd/sys/cloudabi/mod.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,11 @@ pub use libc::strlen;
6161

6262
pub fn hashmap_random_keys() -> (u64, u64) {
6363
unsafe {
64-
let mut v = mem::uninitialized();
65-
libc::arc4random_buf(&mut v as *mut _ as *mut libc::c_void, mem::size_of_val(&v));
66-
v
64+
let mut v: mem::MaybeUninit<(u64, u64)> = mem::MaybeUninit::uninit();
65+
libc::arc4random_buf(
66+
v.as_mut_ptr() as *mut libc::c_void,
67+
mem::size_of_val(v.get_ref())
68+
);
69+
v.assume_init()
6770
}
6871
}

src/libstd/sys/cloudabi/time.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ pub fn checked_dur2intervals(dur: &Duration) -> Option<abi::timestamp> {
1818
impl Instant {
1919
pub fn now() -> Instant {
2020
unsafe {
21-
let mut t = mem::uninitialized();
22-
let ret = abi::clock_time_get(abi::clockid::MONOTONIC, 0, &mut t);
21+
let mut t: mem::MaybeUninit<abi::timestamp> = mem::MaybeUninit::uninit();
22+
let ret = abi::clock_time_get(abi::clockid::MONOTONIC, 0, t.get_mut());
2323
assert_eq!(ret, abi::errno::SUCCESS);
2424
Instant { t }
2525
}
@@ -59,8 +59,8 @@ pub struct SystemTime {
5959
impl SystemTime {
6060
pub fn now() -> SystemTime {
6161
unsafe {
62-
let mut t = mem::uninitialized();
63-
let ret = abi::clock_time_get(abi::clockid::REALTIME, 0, &mut t);
62+
let mut t: mem::MaybeUninit<abi::timestamp> = mem::MaybeUninit::uninit();
63+
let ret = abi::clock_time_get(abi::clockid::REALTIME, 0, t.get_mut());
6464
assert_eq!(ret, abi::errno::SUCCESS);
6565
SystemTime { t }
6666
}

0 commit comments

Comments
 (0)