Skip to content

Commit 6c2e87c

Browse files
committed
Auto merge of #153299 - JonathanBrouwer:rollup-C693cjb, r=JonathanBrouwer
Rollup of 9 pull requests Successful merges: - #153153 (add tests for thumb interworking) - #149328 (Add `String<A>` type with custom allocator parameter) - #151780 (Updated slice tests to pass for big endian hosts for `multiple-option-or-permutations.rs`) - #151962 (Fix next-solver ICE on PointeeSized goals) - #153015 (core: make atomic primitives type aliases of `Atomic<T>`) - #153161 (Rejig `rustc_with_all_queries!`) - #153191 ( don't emit `unused_results` lint for tuples of "trivial" types ) - #153273 (vec/mod.rs: add missing period in "ie." in docs) - #153292 (tests: codegen-llvm: vec-calloc: do not require the uwtable attribute)
2 parents 8ddf4ef + ca7e926 commit 6c2e87c

225 files changed

Lines changed: 1941 additions & 1152 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

RELEASES.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,8 @@ Stabilized APIs
303303
- [`impl PartialEq<String> for PathBuf`](https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#impl-PartialEq%3CString%3E-for-PathBuf)
304304
- [`impl PartialEq<str> for Path`](https://doc.rust-lang.org/stable/std/path/struct.Path.html#impl-PartialEq%3Cstr%3E-for-Path)
305305
- [`impl PartialEq<String> for Path`](https://doc.rust-lang.org/stable/std/path/struct.Path.html#impl-PartialEq%3CString%3E-for-Path)
306-
- [`impl PartialEq<PathBuf> for String`](https://doc.rust-lang.org/stable/std/string/struct.String.html#impl-PartialEq%3CPathBuf%3E-for-String)
307-
- [`impl PartialEq<Path> for String`](https://doc.rust-lang.org/stable/std/string/struct.String.html#impl-PartialEq%3CPath%3E-for-String)
306+
- [`impl PartialEq<PathBuf> for String`](https://doc.rust-lang.org/stable/std/string/type.String.html#impl-PartialEq%3CPathBuf%3E-for-String)
307+
- [`impl PartialEq<Path> for String`](https://doc.rust-lang.org/stable/std/string/type.String.html#impl-PartialEq%3CPath%3E-for-String)
308308
- [`impl PartialEq<PathBuf> for str`](https://doc.rust-lang.org/stable/std/primitive.str.html#impl-PartialEq%3CPathBuf%3E-for-str)
309309
- [`impl PartialEq<Path> for str`](https://doc.rust-lang.org/stable/std/primitive.str.html#impl-PartialEq%3CPath%3E-for-str)
310310
- [`Ipv4Addr::from_octets`](https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.from_octets)
@@ -854,7 +854,7 @@ Stabilized APIs
854854
- [`<[T]>::split_off_first_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_first_mut)
855855
- [`<[T]>::split_off_last`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_last)
856856
- [`<[T]>::split_off_last_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_off_last_mut)
857-
- [`String::extend_from_within`](https://doc.rust-lang.org/stable/alloc/string/struct.String.html#method.extend_from_within)
857+
- [`String::extend_from_within`](https://doc.rust-lang.org/stable/alloc/string/type.String.html#method.extend_from_within)
858858
- [`os_str::Display`](https://doc.rust-lang.org/stable/std/ffi/os_str/struct.Display.html)
859859
- [`OsString::display`](https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.display)
860860
- [`OsStr::display`](https://doc.rust-lang.org/stable/std/ffi/struct.OsStr.html#method.display)
@@ -868,7 +868,7 @@ Stabilized APIs
868868
- [`impl From<PipeReader> for OwnedFd`](https://doc.rust-lang.org/stable/std/os/fd/struct.OwnedFd.html#impl-From%3CPipeReader%3E-for-OwnedFd)
869869
- [`impl From<PipeWriter> for OwnedFd`](https://doc.rust-lang.org/stable/std/os/fd/struct.OwnedFd.html#impl-From%3CPipeWriter%3E-for-OwnedFd)
870870
- [`Box<MaybeUninit<T>>::write`](https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#method.write)
871-
- [`impl TryFrom<Vec<u8>> for String`](https://doc.rust-lang.org/stable/std/string/struct.String.html#impl-TryFrom%3CVec%3Cu8%3E%3E-for-String)
871+
- [`impl TryFrom<Vec<u8>> for String`](https://doc.rust-lang.org/stable/std/string/type.String.html#impl-TryFrom%3CVec%3Cu8%3E%3E-for-String)
872872
- [`<*const T>::offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from_unsigned)
873873
- [`<*const T>::byte_offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.byte_offset_from_unsigned)
874874
- [`<*mut T>::offset_from_unsigned`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from_unsigned-1)
@@ -906,14 +906,14 @@ These previously stable APIs are now stable in const contexts:
906906
- [`char::is_whitespace`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_whitespace)
907907
- [`<[[T; N]]>::as_flattened`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_flattened)
908908
- [`<[[T; N]]>::as_flattened_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_flattened_mut)
909-
- [`String::into_bytes`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.into_bytes)
910-
- [`String::as_str`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_str)
911-
- [`String::capacity`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.capacity)
912-
- [`String::as_bytes`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_bytes)
913-
- [`String::len`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.len)
914-
- [`String::is_empty`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.is_empty)
915-
- [`String::as_mut_str`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_mut_str)
916-
- [`String::as_mut_vec`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.as_mut_vec)
909+
- [`String::into_bytes`](https://doc.rust-lang.org/stable/std/string/type.String.html#method.into_bytes)
910+
- [`String::as_str`](https://doc.rust-lang.org/stable/std/string/type.String.html#method.as_str)
911+
- [`String::capacity`](https://doc.rust-lang.org/stable/std/string/type.String.html#method.capacity)
912+
- [`String::as_bytes`](https://doc.rust-lang.org/stable/std/string/type.String.html#method.as_bytes)
913+
- [`String::len`](https://doc.rust-lang.org/stable/std/string/type.String.html#method.len)
914+
- [`String::is_empty`](https://doc.rust-lang.org/stable/std/string/type.String.html#method.is_empty)
915+
- [`String::as_mut_str`](https://doc.rust-lang.org/stable/std/string/type.String.html#method.as_mut_str)
916+
- [`String::as_mut_vec`](https://doc.rust-lang.org/stable/std/string/type.String.html#method.as_mut_vec)
917917
- [`Vec::as_ptr`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_ptr)
918918
- [`Vec::as_slice`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.as_slice)
919919
- [`Vec::capacity`](https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.capacity)
@@ -2965,7 +2965,7 @@ Stabilized APIs
29652965

29662966
- [`impl<T: Send> Sync for mpsc::Sender<T>`](https://doc.rust-lang.org/stable/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E)
29672967
- [`impl TryFrom<&OsStr> for &str`](https://doc.rust-lang.org/stable/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str)
2968-
- [`String::leak`](https://doc.rust-lang.org/stable/alloc/string/struct.String.html#method.leak)
2968+
- [`String::leak`](https://doc.rust-lang.org/stable/alloc/string/type.String.html#method.leak)
29692969

29702970
These APIs are now stable in const contexts:
29712971

@@ -5024,8 +5024,8 @@ and related tools.
50245024
[`collections::TryReserveError`]: https://doc.rust-lang.org/std/collections/struct.TryReserveError.html
50255025
[`HashMap::try_reserve`]: https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.try_reserve
50265026
[`HashSet::try_reserve`]: https://doc.rust-lang.org/std/collections/hash_set/struct.HashSet.html#method.try_reserve
5027-
[`String::try_reserve`]: https://doc.rust-lang.org/alloc/string/struct.String.html#method.try_reserve
5028-
[`String::try_reserve_exact`]: https://doc.rust-lang.org/alloc/string/struct.String.html#method.try_reserve_exact
5027+
[`String::try_reserve`]: https://doc.rust-lang.org/alloc/string/type.String.html#method.try_reserve
5028+
[`String::try_reserve_exact`]: https://doc.rust-lang.org/alloc/string/type.String.html#method.try_reserve_exact
50295029
[`Vec::try_reserve`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.try_reserve
50305030
[`Vec::try_reserve_exact`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.try_reserve_exact
50315031
[`VecDeque::try_reserve`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.try_reserve
@@ -5166,7 +5166,7 @@ and related tools.
51665166
[`BufWriter::into_parts`]: https://doc.rust-lang.org/stable/std/io/struct.BufWriter.html#method.into_parts
51675167
[`core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}`]: https://github.com/rust-lang/rust/pull/84662
51685168
[`Vec::shrink_to`]: https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.shrink_to
5169-
[`String::shrink_to`]: https://doc.rust-lang.org/stable/std/string/struct.String.html#method.shrink_to
5169+
[`String::shrink_to`]: https://doc.rust-lang.org/stable/std/string/type.String.html#method.shrink_to
51705170
[`OsString::shrink_to`]: https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.shrink_to
51715171
[`PathBuf::shrink_to`]: https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.shrink_to
51725172
[`BinaryHeap::shrink_to`]: https://doc.rust-lang.org/stable/std/collections/struct.BinaryHeap.html#method.shrink_to
@@ -9361,7 +9361,7 @@ Compatibility Notes
93619361
[`Iterator::try_for_each`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.try_for_each
93629362
[`NonNull::cast`]: https://doc.rust-lang.org/std/ptr/struct.NonNull.html#method.cast
93639363
[`Option::filter`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.filter
9364-
[`String::replace_range`]: https://doc.rust-lang.org/std/string/struct.String.html#method.replace_range
9364+
[`String::replace_range`]: https://doc.rust-lang.org/std/string/type.String.html#method.replace_range
93659365
[`Take::set_limit`]: https://doc.rust-lang.org/std/io/struct.Take.html#method.set_limit
93669366
[`hint::unreachable_unchecked`]: https://doc.rust-lang.org/std/hint/fn.unreachable_unchecked.html
93679367
[`os::unix::process::parent_id`]: https://doc.rust-lang.org/std/os/unix/process/fn.parent_id.html
@@ -9606,7 +9606,7 @@ Compatibility Notes
96069606
[`process::id`]: https://doc.rust-lang.org/std/process/fn.id.html
96079607
[`slice::rotate_left`]: https://doc.rust-lang.org/std/primitive.slice.html#method.rotate_left
96089608
[`slice::rotate_right`]: https://doc.rust-lang.org/std/primitive.slice.html#method.rotate_right
9609-
[`String::retain`]: https://doc.rust-lang.org/std/string/struct.String.html#method.retain
9609+
[`String::retain`]: https://doc.rust-lang.org/std/string/type.String.html#method.retain
96109610
[cargo/5041]: https://github.com/rust-lang/cargo/pull/5041
96119611
[cargo/5083]: https://github.com/rust-lang/cargo/pull/5083
96129612

@@ -11057,8 +11057,8 @@ Compatibility Notes
1105711057
[`Result::unwrap_or_default`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.unwrap_or_default
1105811058
[`SocketAddr::is_ipv4`]: https://doc.rust-lang.org/std/net/enum.SocketAddr.html#method.is_ipv4
1105911059
[`SocketAddr::is_ipv6`]: https://doc.rust-lang.org/std/net/enum.SocketAddr.html#method.is_ipv6
11060-
[`String::insert_str`]: https://doc.rust-lang.org/std/string/struct.String.html#method.insert_str
11061-
[`String::split_off`]: https://doc.rust-lang.org/std/string/struct.String.html#method.split_off
11060+
[`String::insert_str`]: https://doc.rust-lang.org/std/string/type.String.html#method.insert_str
11061+
[`String::split_off`]: https://doc.rust-lang.org/std/string/type.String.html#method.split_off
1106211062
[`Vec::dedup_by_key`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.dedup_by_key
1106311063
[`Vec::dedup_by`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.dedup_by
1106411064
[`VecDeque::resize`]: https://doc.rust-lang.org/std/collections/vec_deque/struct.VecDeque.html#method.resize
@@ -12972,8 +12972,8 @@ Compatibility Notes
1297212972
[`Ipv6Addr::is_unspecified`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_unspecified
1297312973
[`Path::strip_prefix`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.strip_prefix
1297412974
[`RandomState::new`]: http://doc.rust-lang.org/nightly/std/collections/hash_map/struct.RandomState.html#method.new
12975-
[`String::as_mut_str`]: http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.as_mut_str
12976-
[`String::as_str`]: http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.as_str
12975+
[`String::as_mut_str`]: http://doc.rust-lang.org/nightly/std/string/type.String.html#method.as_mut_str
12976+
[`String::as_str`]: http://doc.rust-lang.org/nightly/std/string/type.String.html#method.as_str
1297712977
[`Vec::as_mut_slice`]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.as_mut_slice
1297812978
[`Vec::as_slice`]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.as_slice
1297912979
[`clone_from_slice`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.clone_from_slice
@@ -13159,7 +13159,7 @@ Compatibility Notes
1315913159
[`os::unix::fs::DirBuilderExt::mode`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.DirBuilderExt.html#tymethod.mode
1316013160
[`os::unix::fs::DirBuilderExt`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.DirBuilderExt.html
1316113161
[`string::Drain`]: http://doc.rust-lang.org/nightly/std/string/struct.Drain.html
13162-
[`string::String::drain`]: http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.drain
13162+
[`string::String::drain`]: http://doc.rust-lang.org/nightly/std/string/type.String.html#method.drain
1316313163
[`vec::Drain`]: http://doc.rust-lang.org/nightly/std/vec/struct.Drain.html
1316413164
[`vec::Vec::drain`]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.drain
1316513165
[`vec_deque::Drain`]: http://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.Drain.html
@@ -13508,7 +13508,7 @@ Miscellaneous
1350813508
[`Rc::make_mut`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.make_mut
1350913509
[`Rc::try_unwrap`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.try_unwrap
1351013510
[`Result::expect`]: http://doc.rust-lang.org/nightly/core/result/enum.Result.html#method.expect
13511-
[`String::into_boxed_str`]: http://doc.rust-lang.org/nightly/collections/string/struct.String.html#method.into_boxed_str
13511+
[`String::into_boxed_str`]: http://doc.rust-lang.org/nightly/collections/string/type.String.html#method.into_boxed_str
1351213512
[`TcpStream::read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.read_timeout
1351313513
[`TcpStream::set_read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_read_timeout
1351413514
[`TcpStream::write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.write_timeout

compiler/rustc_data_structures/src/marker.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,16 @@ macro_rules! already_send {
5959

6060
// These structures are already `Send`.
6161
already_send!(
62-
[std::backtrace::Backtrace][std::io::Stdout][std::io::Stderr][std::io::Error][std::fs::File][std::panic::Location<'_>]
63-
[rustc_arena::DroplessArena][jobserver_crate::Client][jobserver_crate::HelperThread]
64-
[crate::memmap::Mmap][crate::profiling::SelfProfiler][crate::owned_slice::OwnedSlice]
62+
[std::sync::atomic::AtomicBool][std::sync::atomic::AtomicUsize][std::sync::atomic::AtomicU8]
63+
[std::sync::atomic::AtomicU32][std::backtrace::Backtrace][std::io::Stdout][std::io::Stderr]
64+
[std::io::Error][std::fs::File][std::panic::Location<'_>][rustc_arena::DroplessArena]
65+
[jobserver_crate::Client][jobserver_crate::HelperThread][crate::memmap::Mmap]
66+
[crate::profiling::SelfProfiler][crate::owned_slice::OwnedSlice]
6567
);
6668

69+
#[cfg(target_has_atomic = "64")]
70+
already_send!([std::sync::atomic::AtomicU64]);
71+
6772
macro_rules! impl_dyn_send {
6873
($($($attr: meta)* [$ty: ty where $($generics2: tt)*])*) => {
6974
$(unsafe impl<$($generics2)*> DynSend for $ty {})*

compiler/rustc_lint/src/types.rs

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,31 +1036,13 @@ impl InvalidAtomicOrdering {
10361036
expr: &Expr<'hir>,
10371037
recognized_names: &[Symbol], // used for fast path calculation
10381038
) -> Option<(Symbol, &'hir [Expr<'hir>])> {
1039-
const ATOMIC_TYPES: &[Symbol] = &[
1040-
sym::AtomicBool,
1041-
sym::AtomicPtr,
1042-
sym::AtomicUsize,
1043-
sym::AtomicU8,
1044-
sym::AtomicU16,
1045-
sym::AtomicU32,
1046-
sym::AtomicU64,
1047-
sym::AtomicU128,
1048-
sym::AtomicIsize,
1049-
sym::AtomicI8,
1050-
sym::AtomicI16,
1051-
sym::AtomicI32,
1052-
sym::AtomicI64,
1053-
sym::AtomicI128,
1054-
];
10551039
if let ExprKind::MethodCall(method_path, _, args, _) = &expr.kind
10561040
&& recognized_names.contains(&method_path.ident.name)
10571041
&& let Some(m_def_id) = cx.typeck_results().type_dependent_def_id(expr.hir_id)
10581042
// skip extension traits, only lint functions from the standard library
10591043
&& let Some(impl_did) = cx.tcx.inherent_impl_of_assoc(m_def_id)
10601044
&& let Some(adt) = cx.tcx.type_of(impl_did).instantiate_identity().ty_adt_def()
1061-
&& let parent = cx.tcx.parent(adt.did())
1062-
&& cx.tcx.is_diagnostic_item(sym::atomic_mod, parent)
1063-
&& ATOMIC_TYPES.contains(&cx.tcx.item_name(adt.did()))
1045+
&& cx.tcx.is_diagnostic_item(sym::Atomic, adt.did())
10641046
{
10651047
return Some((method_path.ident.name, args));
10661048
}

compiler/rustc_lint/src/unused/must_use.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,6 @@ impl IsTyMustUse {
108108
_ => self,
109109
}
110110
}
111-
112-
fn yes(self) -> Option<MustUsePath> {
113-
match self {
114-
Self::Yes(must_use_path) => Some(must_use_path),
115-
_ => None,
116-
}
117-
}
118111
}
119112

120113
/// A path through a type to a `must_use` source. Contains useful info for the lint.
@@ -254,16 +247,23 @@ pub fn is_ty_must_use<'tcx>(
254247
// Default to `expr`.
255248
let elem_exprs = elem_exprs.iter().chain(iter::repeat(expr));
256249

257-
let nested_must_use = tys
258-
.iter()
259-
.zip(elem_exprs)
260-
.enumerate()
261-
.filter_map(|(i, (ty, expr))| {
262-
is_ty_must_use(cx, ty, expr, simplify_uninhabited).yes().map(|path| (i, path))
263-
})
264-
.collect::<Vec<_>>();
250+
let mut all_trivial = true;
251+
let mut nested_must_use = Vec::new();
252+
253+
tys.iter().zip(elem_exprs).enumerate().for_each(|(i, (ty, expr))| {
254+
let must_use = is_ty_must_use(cx, ty, expr, simplify_uninhabited);
255+
256+
all_trivial &= matches!(must_use, IsTyMustUse::Trivial);
257+
if let IsTyMustUse::Yes(path) = must_use {
258+
nested_must_use.push((i, path));
259+
}
260+
});
265261

266-
if !nested_must_use.is_empty() {
262+
if all_trivial {
263+
// If all tuple elements are trivial, mark the whole tuple as such.
264+
// i.e. don't emit `unused_results` for types such as `((), ())`
265+
IsTyMustUse::Trivial
266+
} else if !nested_must_use.is_empty() {
267267
IsTyMustUse::Yes(MustUsePath::TupleElement(nested_must_use))
268268
} else {
269269
IsTyMustUse::No

0 commit comments

Comments
 (0)