Skip to content

Commit dbc3cfd

Browse files
committed
Auto merge of rust-lang#70983 - Centril:rollup-npabk7c, r=Centril
Rollup of 8 pull requests Successful merges: - rust-lang#70784 (Consider methods on fundamental `impl` when method is not found on numeric type) - rust-lang#70843 (Remove the Ord bound that was plaguing drain_filter) - rust-lang#70913 (Replace "rc"/"arc" lang items with Rc/Arc diagnostic items.) - rust-lang#70932 (De-abuse TyKind::Error in pattern type checking) - rust-lang#70952 (Clean up E0511 explanation) - rust-lang#70964 (rustc_session CLI lint parsing: mark a temporary hack as such) - rust-lang#70969 (Fix JSON file_name documentation for macros.) - rust-lang#70975 (Fix internal doc comment nits.) Failed merges: r? @ghost
2 parents 167510f + 68e0e6b commit dbc3cfd

File tree

28 files changed

+150
-153
lines changed

28 files changed

+150
-153
lines changed

Diff for: src/doc/rustc/src/json.md

+5-2
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,11 @@ Diagnostics have the following format:
5959
"spans": [
6060
{
6161
/* The file where the span is located.
62-
For spans located within a macro expansion, this will be the
63-
name of the expanded macro in the format "<MACRONAME macros>".
62+
Note that this path may not exist. For example, if the path
63+
points to the standard library, and the rust src is not
64+
available in the sysroot, then it may point to a non-existent
65+
file. Beware that this may also point to the source of an
66+
external crate.
6467
*/
6568
"file_name": "lib.rs",
6669
/* The byte offset where the span starts (0-based, inclusive). */

Diff for: src/liballoc/collections/btree/map.rs

+12-29
Original file line numberDiff line numberDiff line change
@@ -1727,52 +1727,44 @@ impl<K, V> Clone for Values<'_, K, V> {
17271727
#[unstable(feature = "btree_drain_filter", issue = "70530")]
17281728
pub struct DrainFilter<'a, K, V, F>
17291729
where
1730-
K: 'a + Ord, // This Ord bound should be removed before stabilization.
1730+
K: 'a,
17311731
V: 'a,
17321732
F: 'a + FnMut(&K, &mut V) -> bool,
17331733
{
17341734
pred: F,
17351735
inner: DrainFilterInner<'a, K, V>,
17361736
}
1737-
pub(super) struct DrainFilterInner<'a, K, V>
1738-
where
1739-
K: 'a + Ord,
1740-
V: 'a,
1741-
{
1737+
pub(super) struct DrainFilterInner<'a, K: 'a, V: 'a> {
17421738
length: &'a mut usize,
17431739
cur_leaf_edge: Option<Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge>>,
17441740
}
17451741

17461742
#[unstable(feature = "btree_drain_filter", issue = "70530")]
1747-
impl<'a, K, V, F> Drop for DrainFilter<'a, K, V, F>
1743+
impl<K, V, F> Drop for DrainFilter<'_, K, V, F>
17481744
where
1749-
K: 'a + Ord,
1750-
V: 'a,
1751-
F: 'a + FnMut(&K, &mut V) -> bool,
1745+
F: FnMut(&K, &mut V) -> bool,
17521746
{
17531747
fn drop(&mut self) {
17541748
self.for_each(drop);
17551749
}
17561750
}
17571751

17581752
#[unstable(feature = "btree_drain_filter", issue = "70530")]
1759-
impl<'a, K, V, F> fmt::Debug for DrainFilter<'a, K, V, F>
1753+
impl<K, V, F> fmt::Debug for DrainFilter<'_, K, V, F>
17601754
where
1761-
K: 'a + fmt::Debug + Ord,
1762-
V: 'a + fmt::Debug,
1763-
F: 'a + FnMut(&K, &mut V) -> bool,
1755+
K: fmt::Debug,
1756+
V: fmt::Debug,
1757+
F: FnMut(&K, &mut V) -> bool,
17641758
{
17651759
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17661760
f.debug_tuple("DrainFilter").field(&self.inner.peek()).finish()
17671761
}
17681762
}
17691763

17701764
#[unstable(feature = "btree_drain_filter", issue = "70530")]
1771-
impl<'a, K, V, F> Iterator for DrainFilter<'a, K, V, F>
1765+
impl<K, V, F> Iterator for DrainFilter<'_, K, V, F>
17721766
where
1773-
K: 'a + Ord,
1774-
V: 'a,
1775-
F: 'a + FnMut(&K, &mut V) -> bool,
1767+
F: FnMut(&K, &mut V) -> bool,
17761768
{
17771769
type Item = (K, V);
17781770

@@ -1785,11 +1777,7 @@ where
17851777
}
17861778
}
17871779

1788-
impl<'a, K, V> DrainFilterInner<'a, K, V>
1789-
where
1790-
K: 'a + Ord,
1791-
V: 'a,
1792-
{
1780+
impl<'a, K: 'a, V: 'a> DrainFilterInner<'a, K, V> {
17931781
/// Allow Debug implementations to predict the next element.
17941782
pub(super) fn peek(&self) -> Option<(&K, &V)> {
17951783
let edge = self.cur_leaf_edge.as_ref()?;
@@ -1828,12 +1816,7 @@ where
18281816
}
18291817

18301818
#[unstable(feature = "btree_drain_filter", issue = "70530")]
1831-
impl<K, V, F> FusedIterator for DrainFilter<'_, K, V, F>
1832-
where
1833-
K: Ord,
1834-
F: FnMut(&K, &mut V) -> bool,
1835-
{
1836-
}
1819+
impl<K, V, F> FusedIterator for DrainFilter<'_, K, V, F> where F: FnMut(&K, &mut V) -> bool {}
18371820

18381821
#[stable(feature = "btree_range", since = "1.17.0")]
18391822
impl<'a, K, V> Iterator for Range<'a, K, V> {

Diff for: src/liballoc/collections/btree/set.rs

+9-16
Original file line numberDiff line numberDiff line change
@@ -1094,40 +1094,38 @@ impl<'a, T> IntoIterator for &'a BTreeSet<T> {
10941094
#[unstable(feature = "btree_drain_filter", issue = "70530")]
10951095
pub struct DrainFilter<'a, T, F>
10961096
where
1097-
T: 'a + Ord,
1097+
T: 'a,
10981098
F: 'a + FnMut(&T) -> bool,
10991099
{
11001100
pred: F,
11011101
inner: super::map::DrainFilterInner<'a, T, ()>,
11021102
}
11031103

11041104
#[unstable(feature = "btree_drain_filter", issue = "70530")]
1105-
impl<'a, T, F> Drop for DrainFilter<'a, T, F>
1105+
impl<T, F> Drop for DrainFilter<'_, T, F>
11061106
where
1107-
T: 'a + Ord,
1108-
F: 'a + FnMut(&T) -> bool,
1107+
F: FnMut(&T) -> bool,
11091108
{
11101109
fn drop(&mut self) {
11111110
self.for_each(drop);
11121111
}
11131112
}
11141113

11151114
#[unstable(feature = "btree_drain_filter", issue = "70530")]
1116-
impl<'a, T, F> fmt::Debug for DrainFilter<'a, T, F>
1115+
impl<T, F> fmt::Debug for DrainFilter<'_, T, F>
11171116
where
1118-
T: 'a + Ord + fmt::Debug,
1119-
F: 'a + FnMut(&T) -> bool,
1117+
T: fmt::Debug,
1118+
F: FnMut(&T) -> bool,
11201119
{
11211120
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
11221121
f.debug_tuple("DrainFilter").field(&self.inner.peek().map(|(k, _)| k)).finish()
11231122
}
11241123
}
11251124

11261125
#[unstable(feature = "btree_drain_filter", issue = "70530")]
1127-
impl<'a, 'f, T, F> Iterator for DrainFilter<'a, T, F>
1126+
impl<'a, T, F> Iterator for DrainFilter<'_, T, F>
11281127
where
1129-
T: 'a + Ord,
1130-
F: 'a + 'f + FnMut(&T) -> bool,
1128+
F: 'a + FnMut(&T) -> bool,
11311129
{
11321130
type Item = T;
11331131

@@ -1143,12 +1141,7 @@ where
11431141
}
11441142

11451143
#[unstable(feature = "btree_drain_filter", issue = "70530")]
1146-
impl<'a, T, F> FusedIterator for DrainFilter<'a, T, F>
1147-
where
1148-
T: 'a + Ord,
1149-
F: 'a + FnMut(&T) -> bool,
1150-
{
1151-
}
1144+
impl<T, F> FusedIterator for DrainFilter<'_, T, F> where F: FnMut(&T) -> bool {}
11521145

11531146
#[stable(feature = "rust1", since = "1.0.0")]
11541147
impl<T: Ord> Extend<T> for BTreeSet<T> {

Diff for: src/liballoc/rc.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@ struct RcBox<T: ?Sized> {
279279
/// type `T`.
280280
///
281281
/// [get_mut]: #method.get_mut
282-
#[cfg_attr(not(test), lang = "rc")]
282+
#[cfg_attr(all(bootstrap, not(test)), lang = "rc")]
283+
#[cfg_attr(not(test), rustc_diagnostic_item = "Rc")]
283284
#[stable(feature = "rust1", since = "1.0.0")]
284285
pub struct Rc<T: ?Sized> {
285286
ptr: NonNull<RcBox<T>>,

Diff for: src/liballoc/sync.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,8 @@ macro_rules! acquire {
207207
/// counting in general.
208208
///
209209
/// [rc_examples]: ../../std/rc/index.html#examples
210-
#[cfg_attr(not(test), lang = "arc")]
210+
#[cfg_attr(all(bootstrap, not(test)), lang = "arc")]
211+
#[cfg_attr(not(test), rustc_diagnostic_item = "Arc")]
211212
#[stable(feature = "rust1", since = "1.0.0")]
212213
pub struct Arc<T: ?Sized> {
213214
ptr: NonNull<ArcInner<T>>,

Diff for: src/librustc_error_codes/error_codes/E0152.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ Erroneous code example:
55
```compile_fail,E0152
66
#![feature(lang_items)]
77
8-
#[lang = "arc"]
9-
struct Foo; // error: duplicate lang item found: `arc`
8+
#[lang = "owned_box"]
9+
struct Foo; // error: duplicate lang item found: `owned_box`
1010
```
1111

1212
Lang items are already implemented in the standard library. Unless you are

Diff for: src/librustc_error_codes/error_codes/E0511.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
Invalid monomorphization of an intrinsic function was used. Erroneous code
2-
example:
1+
Invalid monomorphization of an intrinsic function was used.
2+
3+
Erroneous code example:
34

45
```compile_fail,E0511
56
#![feature(platform_intrinsics)]

Diff for: src/librustc_error_codes/error_codes/E0718.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ Examples of erroneous code:
66
```compile_fail,E0718
77
#![feature(lang_items)]
88
9-
#[lang = "arc"]
9+
#[lang = "owned_box"]
1010
static X: u32 = 42;
1111
```

Diff for: src/librustc_hir/lang_items.rs

-3
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,4 @@ language_item_table! {
254254
AlignOffsetLangItem, "align_offset", align_offset_fn, Target::Fn;
255255

256256
TerminationTraitLangItem, "termination", termination, Target::Trait;
257-
258-
Arc, "arc", arc, Target::Struct;
259-
Rc, "rc", rc, Target::Struct;
260257
}

Diff for: src/librustc_middle/ty/context.rs

+6
Original file line numberDiff line numberDiff line change
@@ -2209,6 +2209,12 @@ impl<'tcx> TyCtxt<'tcx> {
22092209
Some(self.mk_generic_adt(def_id, ty))
22102210
}
22112211

2212+
#[inline]
2213+
pub fn mk_diagnostic_item(self, ty: Ty<'tcx>, name: Symbol) -> Option<Ty<'tcx>> {
2214+
let def_id = self.get_diagnostic_item(name)?;
2215+
Some(self.mk_generic_adt(def_id, ty))
2216+
}
2217+
22122218
#[inline]
22132219
pub fn mk_maybe_uninit(self, ty: Ty<'tcx>) -> Ty<'tcx> {
22142220
let def_id = self.require_lang_item(lang_items::MaybeUninitLangItem, None);

Diff for: src/librustc_middle/ty/mod.rs

+1-22
Original file line numberDiff line numberDiff line change
@@ -1829,14 +1829,9 @@ bitflags! {
18291829
const IS_BOX = 1 << 6;
18301830
/// Indicates whether the type is `ManuallyDrop`.
18311831
const IS_MANUALLY_DROP = 1 << 7;
1832-
// FIXME(matthewjasper) replace these with diagnostic items
1833-
/// Indicates whether the type is an `Arc`.
1834-
const IS_ARC = 1 << 8;
1835-
/// Indicates whether the type is an `Rc`.
1836-
const IS_RC = 1 << 9;
18371832
/// Indicates whether the variant list of this ADT is `#[non_exhaustive]`.
18381833
/// (i.e., this flag is never set unless this ADT is an enum).
1839-
const IS_VARIANT_LIST_NON_EXHAUSTIVE = 1 << 10;
1834+
const IS_VARIANT_LIST_NON_EXHAUSTIVE = 1 << 8;
18401835
}
18411836
}
18421837

@@ -2221,12 +2216,6 @@ impl<'tcx> AdtDef {
22212216
if Some(did) == tcx.lang_items().manually_drop() {
22222217
flags |= AdtFlags::IS_MANUALLY_DROP;
22232218
}
2224-
if Some(did) == tcx.lang_items().arc() {
2225-
flags |= AdtFlags::IS_ARC;
2226-
}
2227-
if Some(did) == tcx.lang_items().rc() {
2228-
flags |= AdtFlags::IS_RC;
2229-
}
22302219

22312220
AdtDef { did, variants, flags, repr }
22322221
}
@@ -2305,16 +2294,6 @@ impl<'tcx> AdtDef {
23052294
self.flags.contains(AdtFlags::IS_PHANTOM_DATA)
23062295
}
23072296

2308-
/// Returns `true` if this is `Arc<T>`.
2309-
pub fn is_arc(&self) -> bool {
2310-
self.flags.contains(AdtFlags::IS_ARC)
2311-
}
2312-
2313-
/// Returns `true` if this is `Rc<T>`.
2314-
pub fn is_rc(&self) -> bool {
2315-
self.flags.contains(AdtFlags::IS_RC)
2316-
}
2317-
23182297
/// Returns `true` if this is Box<T>.
23192298
#[inline]
23202299
pub fn is_box(&self) -> bool {

Diff for: src/librustc_middle/ty/sty.rs

-18
Original file line numberDiff line numberDiff line change
@@ -1864,24 +1864,6 @@ impl<'tcx> TyS<'tcx> {
18641864
self.is_region_ptr() || self.is_unsafe_ptr() || self.is_fn_ptr()
18651865
}
18661866

1867-
/// Returns `true` if this type is an `Arc<T>`.
1868-
#[inline]
1869-
pub fn is_arc(&self) -> bool {
1870-
match self.kind {
1871-
Adt(def, _) => def.is_arc(),
1872-
_ => false,
1873-
}
1874-
}
1875-
1876-
/// Returns `true` if this type is an `Rc<T>`.
1877-
#[inline]
1878-
pub fn is_rc(&self) -> bool {
1879-
match self.kind {
1880-
Adt(def, _) => def.is_rc(),
1881-
_ => false,
1882-
}
1883-
}
1884-
18851867
#[inline]
18861868
pub fn is_box(&self) -> bool {
18871869
match self.kind {

Diff for: src/librustc_mir/borrow_check/diagnostics/mod.rs

+15-15
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use rustc_middle::mir::{
1111
};
1212
use rustc_middle::ty::print::Print;
1313
use rustc_middle::ty::{self, DefIdTree, Ty, TyCtxt};
14-
use rustc_span::Span;
14+
use rustc_span::{symbol::sym, Span};
1515
use rustc_target::abi::VariantIdx;
1616

1717
use super::borrow_set::BorrowData;
@@ -632,20 +632,20 @@ pub(super) enum BorrowedContentSource<'tcx> {
632632
}
633633

634634
impl BorrowedContentSource<'tcx> {
635-
pub(super) fn describe_for_unnamed_place(&self) -> String {
635+
pub(super) fn describe_for_unnamed_place(&self, tcx: TyCtxt<'_>) -> String {
636636
match *self {
637637
BorrowedContentSource::DerefRawPointer => "a raw pointer".to_string(),
638638
BorrowedContentSource::DerefSharedRef => "a shared reference".to_string(),
639639
BorrowedContentSource::DerefMutableRef => "a mutable reference".to_string(),
640-
BorrowedContentSource::OverloadedDeref(ty) => {
641-
if ty.is_rc() {
640+
BorrowedContentSource::OverloadedDeref(ty) => match ty.kind {
641+
ty::Adt(def, _) if tcx.is_diagnostic_item(sym::Rc, def.did) => {
642642
"an `Rc`".to_string()
643-
} else if ty.is_arc() {
643+
}
644+
ty::Adt(def, _) if tcx.is_diagnostic_item(sym::Arc, def.did) => {
644645
"an `Arc`".to_string()
645-
} else {
646-
format!("dereference of `{}`", ty)
647646
}
648-
}
647+
_ => format!("dereference of `{}`", ty),
648+
},
649649
BorrowedContentSource::OverloadedIndex(ty) => format!("index of `{}`", ty),
650650
}
651651
}
@@ -662,22 +662,22 @@ impl BorrowedContentSource<'tcx> {
662662
}
663663
}
664664

665-
pub(super) fn describe_for_immutable_place(&self) -> String {
665+
pub(super) fn describe_for_immutable_place(&self, tcx: TyCtxt<'_>) -> String {
666666
match *self {
667667
BorrowedContentSource::DerefRawPointer => "a `*const` pointer".to_string(),
668668
BorrowedContentSource::DerefSharedRef => "a `&` reference".to_string(),
669669
BorrowedContentSource::DerefMutableRef => {
670670
bug!("describe_for_immutable_place: DerefMutableRef isn't immutable")
671671
}
672-
BorrowedContentSource::OverloadedDeref(ty) => {
673-
if ty.is_rc() {
672+
BorrowedContentSource::OverloadedDeref(ty) => match ty.kind {
673+
ty::Adt(def, _) if tcx.is_diagnostic_item(sym::Rc, def.did) => {
674674
"an `Rc`".to_string()
675-
} else if ty.is_arc() {
675+
}
676+
ty::Adt(def, _) if tcx.is_diagnostic_item(sym::Arc, def.did) => {
676677
"an `Arc`".to_string()
677-
} else {
678-
format!("a dereference of `{}`", ty)
679678
}
680-
}
679+
_ => format!("a dereference of `{}`", ty),
680+
},
681681
BorrowedContentSource::OverloadedIndex(ty) => format!("an index of `{}`", ty),
682682
}
683683
}

Diff for: src/librustc_mir/borrow_check/diagnostics/move_errors.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,10 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
377377
span,
378378
&format!("`{}` which is behind a {}", place_desc, source_desc),
379379
),
380-
(_, _) => self.cannot_move_out_of(span, &source.describe_for_unnamed_place()),
380+
(_, _) => self.cannot_move_out_of(
381+
span,
382+
&source.describe_for_unnamed_place(self.infcx.tcx),
383+
),
381384
}
382385
}
383386
};

Diff for: src/librustc_mir/borrow_check/diagnostics/mutability_errors.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
120120
local: the_place_err.local,
121121
projection: proj_base,
122122
});
123-
let pointer_type = source.describe_for_immutable_place();
123+
let pointer_type = source.describe_for_immutable_place(self.infcx.tcx);
124124
opt_source = Some(source);
125125
if let Some(desc) = access_place_desc {
126126
item_msg = format!("`{}`", desc);

0 commit comments

Comments
 (0)