Skip to content

Commit 78306f0

Browse files
authored
Rollup merge of #84179 - CDirkx:dont_send_sync, r=m-ou-se
Explicitly implement `!Send` and `!Sync` for `sys::{Args, Env}` Remove the field `_dont_send_or_sync_me: PhantomData<*mut ()>` in favor of an explicit implementation of `!Send` and `!Sync`.
2 parents 46b67ab + dc110af commit 78306f0

File tree

7 files changed

+30
-27
lines changed

7 files changed

+30
-27
lines changed

library/std/src/sys/hermit/args.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use crate::ffi::OsString;
22
use crate::fmt;
3-
use crate::marker::PhantomData;
43
use crate::vec;
54

65
/// One-time global initialization.
@@ -20,7 +19,6 @@ pub fn args() -> Args {
2019

2120
pub struct Args {
2221
iter: vec::IntoIter<OsString>,
23-
_dont_send_or_sync_me: PhantomData<*mut ()>,
2422
}
2523

2624
impl fmt::Debug for Args {
@@ -29,6 +27,9 @@ impl fmt::Debug for Args {
2927
}
3028
}
3129

30+
impl !Send for Args {}
31+
impl !Sync for Args {}
32+
3233
impl Iterator for Args {
3334
type Item = OsString;
3435
fn next(&mut self) -> Option<OsString> {
@@ -54,7 +55,6 @@ impl DoubleEndedIterator for Args {
5455
mod imp {
5556
use super::Args;
5657
use crate::ffi::{CStr, OsString};
57-
use crate::marker::PhantomData;
5858
use crate::ptr;
5959
use crate::sys_common::os_str_bytes::*;
6060

@@ -77,7 +77,7 @@ mod imp {
7777
}
7878

7979
pub fn args() -> Args {
80-
Args { iter: clone().into_iter(), _dont_send_or_sync_me: PhantomData }
80+
Args { iter: clone().into_iter() }
8181
}
8282

8383
fn clone() -> Vec<OsString> {

library/std/src/sys/hermit/os.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,11 @@ pub fn init_environment(env: *const *const i8) {
110110

111111
pub struct Env {
112112
iter: vec::IntoIter<(OsString, OsString)>,
113-
_dont_send_or_sync_me: PhantomData<*mut ()>,
114113
}
115114

115+
impl !Send for Env {}
116+
impl !Sync for Env {}
117+
116118
impl Iterator for Env {
117119
type Item = (OsString, OsString);
118120
fn next(&mut self) -> Option<(OsString, OsString)> {
@@ -134,7 +136,7 @@ pub fn env() -> Env {
134136
result.push((key.clone(), value.clone()));
135137
}
136138

137-
return Env { iter: result.into_iter(), _dont_send_or_sync_me: PhantomData };
139+
return Env { iter: result.into_iter() };
138140
}
139141
}
140142

library/std/src/sys/unix/args.rs

+6-7
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
use crate::ffi::OsString;
99
use crate::fmt;
10-
use crate::marker::PhantomData;
1110
use crate::vec;
1211

1312
/// One-time global initialization.
@@ -27,9 +26,11 @@ pub fn args() -> Args {
2726

2827
pub struct Args {
2928
iter: vec::IntoIter<OsString>,
30-
_dont_send_or_sync_me: PhantomData<*mut ()>,
3129
}
3230

31+
impl !Send for Args {}
32+
impl !Sync for Args {}
33+
3334
impl fmt::Debug for Args {
3435
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3536
self.iter.as_slice().fmt(f)
@@ -77,7 +78,6 @@ impl DoubleEndedIterator for Args {
7778
mod imp {
7879
use super::Args;
7980
use crate::ffi::{CStr, OsString};
80-
use crate::marker::PhantomData;
8181
use crate::os::unix::prelude::*;
8282
use crate::ptr;
8383
use crate::sync::atomic::{AtomicIsize, AtomicPtr, Ordering};
@@ -134,7 +134,7 @@ mod imp {
134134
}
135135

136136
pub fn args() -> Args {
137-
Args { iter: clone().into_iter(), _dont_send_or_sync_me: PhantomData }
137+
Args { iter: clone().into_iter() }
138138
}
139139

140140
fn clone() -> Vec<OsString> {
@@ -156,7 +156,6 @@ mod imp {
156156
mod imp {
157157
use super::Args;
158158
use crate::ffi::CStr;
159-
use crate::marker::PhantomData;
160159

161160
pub unsafe fn init(_argc: isize, _argv: *const *const u8) {}
162161

@@ -181,7 +180,7 @@ mod imp {
181180
})
182181
.collect::<Vec<_>>()
183182
};
184-
Args { iter: vec.into_iter(), _dont_send_or_sync_me: PhantomData }
183+
Args { iter: vec.into_iter() }
185184
}
186185

187186
// As _NSGetArgc and _NSGetArgv aren't mentioned in iOS docs
@@ -248,6 +247,6 @@ mod imp {
248247
}
249248
}
250249

251-
Args { iter: res.into_iter(), _dont_send_or_sync_me: PhantomData }
250+
Args { iter: res.into_iter() }
252251
}
253252
}

library/std/src/sys/unix/os.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ use crate::ffi::{CStr, CString, OsStr, OsString};
1212
use crate::fmt;
1313
use crate::io;
1414
use crate::iter;
15-
use crate::marker::PhantomData;
1615
use crate::mem;
1716
use crate::memchr;
1817
use crate::path::{self, PathBuf};
@@ -460,9 +459,11 @@ pub fn current_exe() -> io::Result<PathBuf> {
460459

461460
pub struct Env {
462461
iter: vec::IntoIter<(OsString, OsString)>,
463-
_dont_send_or_sync_me: PhantomData<*mut ()>,
464462
}
465463

464+
impl !Send for Env {}
465+
impl !Sync for Env {}
466+
466467
impl Iterator for Env {
467468
type Item = (OsString, OsString);
468469
fn next(&mut self) -> Option<(OsString, OsString)> {
@@ -510,7 +511,7 @@ pub fn env() -> Env {
510511
environ = environ.add(1);
511512
}
512513
}
513-
return Env { iter: result.into_iter(), _dont_send_or_sync_me: PhantomData };
514+
return Env { iter: result.into_iter() };
514515
}
515516

516517
fn parse(input: &[u8]) -> Option<(OsString, OsString)> {

library/std/src/sys/wasi/args.rs

+4-6
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
use crate::ffi::{CStr, OsStr, OsString};
44
use crate::fmt;
5-
use crate::marker::PhantomData;
65
use crate::os::wasi::ffi::OsStrExt;
76
use crate::vec;
87

@@ -12,15 +11,14 @@ pub unsafe fn cleanup() {}
1211

1312
pub struct Args {
1413
iter: vec::IntoIter<OsString>,
15-
_dont_send_or_sync_me: PhantomData<*mut ()>,
1614
}
1715

16+
impl !Send for Args {}
17+
impl !Sync for Args {}
18+
1819
/// Returns the command line arguments
1920
pub fn args() -> Args {
20-
Args {
21-
iter: maybe_args().unwrap_or(Vec::new()).into_iter(),
22-
_dont_send_or_sync_me: PhantomData,
23-
}
21+
Args { iter: maybe_args().unwrap_or(Vec::new()).into_iter() }
2422
}
2523

2624
fn maybe_args() -> Option<Vec<OsString>> {

library/std/src/sys/wasi/os.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,11 @@ pub fn current_exe() -> io::Result<PathBuf> {
129129
}
130130
pub struct Env {
131131
iter: vec::IntoIter<(OsString, OsString)>,
132-
_dont_send_or_sync_me: PhantomData<*mut ()>,
133132
}
134133

134+
impl !Send for Env {}
135+
impl !Sync for Env {}
136+
135137
impl Iterator for Env {
136138
type Item = (OsString, OsString);
137139
fn next(&mut self) -> Option<(OsString, OsString)> {
@@ -155,7 +157,7 @@ pub fn env() -> Env {
155157
environ = environ.add(1);
156158
}
157159
}
158-
return Env { iter: result.into_iter(), _dont_send_or_sync_me: PhantomData };
160+
return Env { iter: result.into_iter() };
159161
}
160162

161163
// See src/libstd/sys/unix/os.rs, same as that

library/std/src/sys/wasm/args.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use crate::ffi::OsString;
22
use crate::fmt;
3-
use crate::marker::PhantomData;
43
use crate::vec;
54

65
pub unsafe fn init(_argc: isize, _argv: *const *const u8) {
@@ -10,14 +9,16 @@ pub unsafe fn init(_argc: isize, _argv: *const *const u8) {
109
pub unsafe fn cleanup() {}
1110

1211
pub fn args() -> Args {
13-
Args { iter: Vec::new().into_iter(), _dont_send_or_sync_me: PhantomData }
12+
Args { iter: Vec::new().into_iter() }
1413
}
1514

1615
pub struct Args {
1716
iter: vec::IntoIter<OsString>,
18-
_dont_send_or_sync_me: PhantomData<*mut ()>,
1917
}
2018

19+
impl !Send for Args {}
20+
impl !Sync for Args {}
21+
2122
impl fmt::Debug for Args {
2223
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2324
self.iter.as_slice().fmt(f)

0 commit comments

Comments
 (0)