Skip to content

Commit 16e0773

Browse files
authored
Rollup merge of rust-lang#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 be1d543 + 2ecc820 commit 16e0773

File tree

7 files changed

+30
-29
lines changed

7 files changed

+30
-29
lines changed

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use crate::ffi::OsString;
2-
use crate::marker::PhantomData;
32
use crate::vec;
43

54
/// One-time global initialization.
@@ -19,7 +18,6 @@ pub fn args() -> Args {
1918

2019
pub struct Args {
2120
iter: vec::IntoIter<OsString>,
22-
_dont_send_or_sync_me: PhantomData<*mut ()>,
2321
}
2422

2523
impl Args {
@@ -28,6 +26,9 @@ impl Args {
2826
}
2927
}
3028

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

@@ -76,7 +76,7 @@ mod imp {
7676
}
7777

7878
pub fn args() -> Args {
79-
Args { iter: clone().into_iter(), _dont_send_or_sync_me: PhantomData }
79+
Args { iter: clone().into_iter() }
8080
}
8181

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

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

+4-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use crate::error::Error as StdError;
33
use crate::ffi::{CStr, OsStr, OsString};
44
use crate::fmt;
55
use crate::io;
6-
use crate::marker::PhantomData;
76
use crate::memchr;
87
use crate::path::{self, PathBuf};
98
use crate::str;
@@ -110,9 +109,11 @@ pub fn init_environment(env: *const *const i8) {
110109

111110
pub struct Env {
112111
iter: vec::IntoIter<(OsString, OsString)>,
113-
_dont_send_or_sync_me: PhantomData<*mut ()>,
114112
}
115113

114+
impl !Send for Env {}
115+
impl !Sync for Env {}
116+
116117
impl Iterator for Env {
117118
type Item = (OsString, OsString);
118119
fn next(&mut self) -> Option<(OsString, OsString)> {
@@ -134,7 +135,7 @@ pub fn env() -> Env {
134135
result.push((key.clone(), value.clone()));
135136
}
136137

137-
return Env { iter: result.into_iter(), _dont_send_or_sync_me: PhantomData };
138+
return Env { iter: result.into_iter() };
138139
}
139140
}
140141

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

+6-7
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
#![allow(dead_code)] // runtime init functions not used during testing
77

88
use crate::ffi::OsString;
9-
use crate::marker::PhantomData;
109
use crate::vec;
1110

1211
/// One-time global initialization.
@@ -26,9 +25,11 @@ pub fn args() -> Args {
2625

2726
pub struct Args {
2827
iter: vec::IntoIter<OsString>,
29-
_dont_send_or_sync_me: PhantomData<*mut ()>,
3028
}
3129

30+
impl !Send for Args {}
31+
impl !Sync for Args {}
32+
3233
impl Args {
3334
pub fn inner_debug(&self) -> &[OsString] {
3435
self.iter.as_slice()
@@ -76,7 +77,6 @@ impl DoubleEndedIterator for Args {
7677
mod imp {
7778
use super::Args;
7879
use crate::ffi::{CStr, OsString};
79-
use crate::marker::PhantomData;
8080
use crate::os::unix::prelude::*;
8181
use crate::ptr;
8282
use crate::sync::atomic::{AtomicIsize, AtomicPtr, Ordering};
@@ -133,7 +133,7 @@ mod imp {
133133
}
134134

135135
pub fn args() -> Args {
136-
Args { iter: clone().into_iter(), _dont_send_or_sync_me: PhantomData }
136+
Args { iter: clone().into_iter() }
137137
}
138138

139139
fn clone() -> Vec<OsString> {
@@ -155,7 +155,6 @@ mod imp {
155155
mod imp {
156156
use super::Args;
157157
use crate::ffi::CStr;
158-
use crate::marker::PhantomData;
159158

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

@@ -180,7 +179,7 @@ mod imp {
180179
})
181180
.collect::<Vec<_>>()
182181
};
183-
Args { iter: vec.into_iter(), _dont_send_or_sync_me: PhantomData }
182+
Args { iter: vec.into_iter() }
184183
}
185184

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

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

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
@@ -1,7 +1,6 @@
11
#![deny(unsafe_op_in_unsafe_fn)]
22

33
use crate::ffi::{CStr, OsStr, OsString};
4-
use crate::marker::PhantomData;
54
use crate::os::wasi::ffi::OsStrExt;
65
use crate::vec;
76

@@ -11,15 +10,14 @@ pub unsafe fn cleanup() {}
1110

1211
pub struct Args {
1312
iter: vec::IntoIter<OsString>,
14-
_dont_send_or_sync_me: PhantomData<*mut ()>,
1513
}
1614

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

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

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

+4-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use crate::error::Error as StdError;
55
use crate::ffi::{CStr, CString, OsStr, OsString};
66
use crate::fmt;
77
use crate::io;
8-
use crate::marker::PhantomData;
98
use crate::os::wasi::prelude::*;
109
use crate::path::{self, PathBuf};
1110
use crate::str;
@@ -129,9 +128,11 @@ pub fn current_exe() -> io::Result<PathBuf> {
129128
}
130129
pub struct Env {
131130
iter: vec::IntoIter<(OsString, OsString)>,
132-
_dont_send_or_sync_me: PhantomData<*mut ()>,
133131
}
134132

133+
impl !Send for Env {}
134+
impl !Sync for Env {}
135+
135136
impl Iterator for Env {
136137
type Item = (OsString, OsString);
137138
fn next(&mut self) -> Option<(OsString, OsString)> {
@@ -155,7 +156,7 @@ pub fn env() -> Env {
155156
environ = environ.add(1);
156157
}
157158
}
158-
return Env { iter: result.into_iter(), _dont_send_or_sync_me: PhantomData };
159+
return Env { iter: result.into_iter() };
159160
}
160161

161162
// 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,5 +1,4 @@
11
use crate::ffi::OsString;
2-
use crate::marker::PhantomData;
32
use crate::vec;
43

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

1110
pub fn args() -> Args {
12-
Args { iter: Vec::new().into_iter(), _dont_send_or_sync_me: PhantomData }
11+
Args { iter: Vec::new().into_iter() }
1312
}
1413

1514
pub struct Args {
1615
iter: vec::IntoIter<OsString>,
17-
_dont_send_or_sync_me: PhantomData<*mut ()>,
1816
}
1917

18+
impl !Send for Args {}
19+
impl !Sync for Args {}
20+
2021
impl Args {
2122
pub fn inner_debug(&self) -> &[OsString] {
2223
self.iter.as_slice()

0 commit comments

Comments
 (0)