diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-06-29 05:48:40 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-29 05:48:40 +0200 |
| commit | f35f213d2704665d9888e296809a51e4050ef08a (patch) | |
| tree | cbeec3b999c3b287ff976463b90ce8ecaf501a85 | |
| parent | 1963688f931273de77afe3100cfd320097ddbff1 (diff) | |
| parent | 48544c1b12b50ab5fd6a772060c17bdb8b5a32d2 (diff) | |
| download | rust-f35f213d2704665d9888e296809a51e4050ef08a.tar.gz rust-f35f213d2704665d9888e296809a51e4050ef08a.zip | |
Rollup merge of #113054 - Rageking8:make-`rustc_on_unimplemented`-std-agnostic, r=WaffleLapkin
Make `rustc_on_unimplemented` std-agnostic See #112923 r? `@WaffleLapkin`
| -rw-r--r-- | library/core/src/convert/mod.rs | 2 | ||||
| -rw-r--r-- | library/core/src/iter/traits/iterator.rs | 8 | ||||
| -rw-r--r-- | library/core/src/marker.rs | 28 | ||||
| -rw-r--r-- | library/core/src/ops/index.rs | 2 | ||||
| -rw-r--r-- | library/core/src/ops/try_trait.rs | 45 | ||||
| -rw-r--r-- | library/core/src/slice/index.rs | 5 |
6 files changed, 60 insertions, 30 deletions
diff --git a/library/core/src/convert/mod.rs b/library/core/src/convert/mod.rs index 799085e9a83..ff5a4c913b7 100644 --- a/library/core/src/convert/mod.rs +++ b/library/core/src/convert/mod.rs @@ -532,7 +532,7 @@ pub trait Into<T>: Sized { #[rustc_diagnostic_item = "From"] #[stable(feature = "rust1", since = "1.0.0")] #[rustc_on_unimplemented(on( - all(_Self = "&str", T = "std::string::String"), + all(_Self = "&str", any(T = "alloc::string::String", T = "std::string::String")), note = "to coerce a `{T}` into a `{Self}`, use `&*` as a prefix", ))] pub trait From<T>: Sized { diff --git a/library/core/src/iter/traits/iterator.rs b/library/core/src/iter/traits/iterator.rs index dabfce14474..98835228308 100644 --- a/library/core/src/iter/traits/iterator.rs +++ b/library/core/src/iter/traits/iterator.rs @@ -26,13 +26,13 @@ fn _assert_is_object_safe(_: &dyn Iterator<Item = ()>) {} #[stable(feature = "rust1", since = "1.0.0")] #[rustc_on_unimplemented( on( - _Self = "std::ops::RangeTo<Idx>", + any(_Self = "core::ops::RangeTo<Idx>", _Self = "std::ops::RangeTo<Idx>"), label = "if you meant to iterate until a value, add a starting value", note = "`..end` is a `RangeTo`, which cannot be iterated on; you might have meant to have a \ bounded `Range`: `0..end`" ), on( - _Self = "std::ops::RangeToInclusive<Idx>", + any(_Self = "core::ops::RangeToInclusive<Idx>", _Self = "std::ops::RangeToInclusive<Idx>"), label = "if you meant to iterate until a value (including it), add a starting value", note = "`..=end` is a `RangeToInclusive`, which cannot be iterated on; you might have meant \ to have a bounded `RangeInclusive`: `0..=end`" @@ -43,7 +43,7 @@ fn _assert_is_object_safe(_: &dyn Iterator<Item = ()>) {} ), on(_Self = "&[]", label = "`{Self}` is not an iterator; try calling `.iter()`"), on( - _Self = "std::vec::Vec<T, A>", + any(_Self = "alloc::vec::Vec<T, A>", _Self = "std::vec::Vec<T, A>"), label = "`{Self}` is not an iterator; try calling `.into_iter()` or `.iter()`" ), on( @@ -51,7 +51,7 @@ fn _assert_is_object_safe(_: &dyn Iterator<Item = ()>) {} label = "`{Self}` is not an iterator; try calling `.chars()` or `.bytes()`" ), on( - _Self = "std::string::String", + any(_Self = "alloc::string::String", _Self = "std::string::String"), label = "`{Self}` is not an iterator; try calling `.chars()` or `.bytes()`" ), on( diff --git a/library/core/src/marker.rs b/library/core/src/marker.rs index 760e58276fc..e251015dd86 100644 --- a/library/core/src/marker.rs +++ b/library/core/src/marker.rs @@ -575,59 +575,59 @@ impl<T: ?Sized> Copy for &T {} #[lang = "sync"] #[rustc_on_unimplemented( on( - _Self = "std::cell::OnceCell<T>", + any(_Self = "core::cell:OnceCell<T>", _Self = "std::cell::OnceCell<T>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::OnceLock` instead" ), on( - _Self = "std::cell::Cell<u8>", + any(_Self = "core::cell::Cell<u8>", _Self = "std::cell::Cell<u8>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU8` instead", ), on( - _Self = "std::cell::Cell<u16>", + any(_Self = "core::cell::Cell<u16>", _Self = "std::cell::Cell<u16>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU16` instead", ), on( - _Self = "std::cell::Cell<u32>", + any(_Self = "core::cell::Cell<u32>", _Self = "std::cell::Cell<u32>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU32` instead", ), on( - _Self = "std::cell::Cell<u64>", + any(_Self = "core::cell::Cell<u64>", _Self = "std::cell::Cell<u64>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU64` instead", ), on( - _Self = "std::cell::Cell<usize>", + any(_Self = "core::cell::Cell<usize>", _Self = "std::cell::Cell<usize>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicUsize` instead", ), on( - _Self = "std::cell::Cell<i8>", + any(_Self = "core::cell::Cell<i8>", _Self = "std::cell::Cell<i8>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI8` instead", ), on( - _Self = "std::cell::Cell<i16>", + any(_Self = "core::cell::Cell<i16>", _Self = "std::cell::Cell<i16>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI16` instead", ), on( - _Self = "std::cell::Cell<i32>", + any(_Self = "core::cell::Cell<i32>", _Self = "std::cell::Cell<i32>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32` instead", ), on( - _Self = "std::cell::Cell<i64>", + any(_Self = "core::cell::Cell<i64>", _Self = "std::cell::Cell<i64>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI64` instead", ), on( - _Self = "std::cell::Cell<isize>", + any(_Self = "core::cell::Cell<isize>", _Self = "std::cell::Cell<isize>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicIsize` instead", ), on( - _Self = "std::cell::Cell<bool>", + any(_Self = "core::cell::Cell<bool>", _Self = "std::cell::Cell<bool>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicBool` instead", ), on( - _Self = "std::cell::Cell<T>", + any(_Self = "core::cell::Cell<T>", _Self = "std::cell::Cell<T>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock`", ), on( - _Self = "std::cell::RefCell<T>", + any(_Self = "core::cell::RefCell<T>", _Self = "std::cell::RefCell<T>"), note = "if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` instead", ), message = "`{Self}` cannot be shared between threads safely", diff --git a/library/core/src/ops/index.rs b/library/core/src/ops/index.rs index 1f1784ec9b2..f4649be54d5 100644 --- a/library/core/src/ops/index.rs +++ b/library/core/src/ops/index.rs @@ -153,7 +153,7 @@ see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#ind see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>" ), on( - _Self = "std::string::String", + any(_Self = "alloc::string::String", _Self = "std::string::String"), note = "you can use `.chars().nth()` or `.bytes().nth()` see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>" ), diff --git a/library/core/src/ops/try_trait.rs b/library/core/src/ops/try_trait.rs index b4f69d0b213..17625daccbc 100644 --- a/library/core/src/ops/try_trait.rs +++ b/library/core/src/ops/try_trait.rs @@ -226,8 +226,14 @@ pub trait Try: FromResidual { on( all( from_desugaring = "QuestionMark", - _Self = "std::result::Result<T, E>", - R = "std::option::Option<std::convert::Infallible>" + any( + _Self = "core::result::Result<T, E>", + _Self = "std::result::Result<T, E>", + ), + any( + R = "core::option::Option<core::convert::Infallible>", + R = "std::option::Option<std::convert::Infallible>", + ) ), message = "the `?` operator can only be used on `Result`s, not `Option`s, \ in {ItemContext} that returns `Result`", @@ -237,7 +243,10 @@ pub trait Try: FromResidual { on( all( from_desugaring = "QuestionMark", - _Self = "std::result::Result<T, E>", + any( + _Self = "core::result::Result<T, E>", + _Self = "std::result::Result<T, E>", + ) ), // There's a special error message in the trait selection code for // `From` in `?`, so this is not shown for result-in-result errors, @@ -250,8 +259,14 @@ pub trait Try: FromResidual { on( all( from_desugaring = "QuestionMark", - _Self = "std::option::Option<T>", - R = "std::result::Result<T, E>", + any( + _Self = "core::option::Option<T>", + _Self = "std::option::Option<T>", + ), + any( + R = "core::result::Result<T, E>", + R = "std::result::Result<T, E>", + ) ), message = "the `?` operator can only be used on `Option`s, not `Result`s, \ in {ItemContext} that returns `Option`", @@ -261,7 +276,10 @@ pub trait Try: FromResidual { on( all( from_desugaring = "QuestionMark", - _Self = "std::option::Option<T>", + any( + _Self = "core::option::Option<T>", + _Self = "std::option::Option<T>", + ) ), // `Option`-in-`Option` always works, as there's only one possible // residual, so this can also be phrased strongly. @@ -273,8 +291,14 @@ pub trait Try: FromResidual { on( all( from_desugaring = "QuestionMark", - _Self = "std::ops::ControlFlow<B, C>", - R = "std::ops::ControlFlow<B, C>", + any( + _Self = "core::ops::ControlFlow<B, C>", + _Self = "std::ops::ControlFlow<B, C>", + ), + any( + R = "core::ops::ControlFlow<B, C>", + R = "std::ops::ControlFlow<B, C>", + ) ), message = "the `?` operator in {ItemContext} that returns `ControlFlow<B, _>` \ can only be used on other `ControlFlow<B, _>`s (with the same Break type)", @@ -285,7 +309,10 @@ pub trait Try: FromResidual { on( all( from_desugaring = "QuestionMark", - _Self = "std::ops::ControlFlow<B, C>", + any( + _Self = "core::ops::ControlFlow<B, C>", + _Self = "std::ops::ControlFlow<B, C>", + ) // `R` is not a `ControlFlow`, as that case was matched previously ), message = "the `?` operator can only be used on `ControlFlow`s \ diff --git a/library/core/src/slice/index.rs b/library/core/src/slice/index.rs index 6ef9f9c95e8..e1e3bcc05e7 100644 --- a/library/core/src/slice/index.rs +++ b/library/core/src/slice/index.rs @@ -152,7 +152,10 @@ mod private_slice_index { #[rustc_on_unimplemented( on(T = "str", label = "string indices are ranges of `usize`",), on( - all(any(T = "str", T = "&str", T = "std::string::String"), _Self = "{integer}"), + all( + any(T = "str", T = "&str", T = "alloc::string::String", T = "std::string::String"), + _Self = "{integer}" + ), note = "you can use `.chars().nth()` or `.bytes().nth()`\n\ for more information, see chapter 8 in The Book: \ <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>" |
