Skip to content

Commit b2e5868

Browse files
committed
Auto merge of #59789 - eddyb:typeck-reverts, r=<try>
Revert two unapproved changes to rustc_typeck. There was a breakdown in process (#59004 (comment), #58894 (comment)) and two changes were made to `rustc_typeck`'s "collect" queries, for rustdoc, that were neither needed *nor* correct. I'm reverting them here, and will fix up rustdoc *somehow*, if necessary. cc @rust-lang/compiler How do we ensure this doesn't happen again? r? @nikomatsakis or @oli-obk
2 parents 3750348 + 76166f6 commit b2e5868

File tree

10 files changed

+166
-141
lines changed

10 files changed

+166
-141
lines changed

src/librustc/ty/codec.rs

+54-7
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,26 @@ pub fn encode_with_shorthand<E, T, M>(encoder: &mut E,
9090
Ok(())
9191
}
9292

93-
pub fn encode_predicates<'tcx, E, C>(encoder: &mut E,
94-
predicates: &ty::GenericPredicates<'tcx>,
95-
cache: C)
96-
-> Result<(), E::Error>
93+
pub fn encode_predicates<'tcx, E, C>(
94+
encoder: &mut E,
95+
predicates: &[ty::Predicate<'tcx>],
96+
cache: C,
97+
) -> Result<(), E::Error>
98+
where E: TyEncoder,
99+
C: for<'b> Fn(&'b mut E) -> &'b mut FxHashMap<ty::Predicate<'tcx>, usize>,
100+
{
101+
predicates.len().encode(encoder)?;
102+
for predicate in predicates {
103+
encode_with_shorthand(encoder, predicate, &cache)?;
104+
}
105+
Ok(())
106+
}
107+
108+
pub fn encode_generic_predicates<'tcx, E, C>(
109+
encoder: &mut E,
110+
predicates: &ty::GenericPredicates<'tcx>,
111+
cache: C,
112+
) -> Result<(), E::Error>
97113
where E: TyEncoder,
98114
C: for<'b> Fn(&'b mut E) -> &'b mut FxHashMap<ty::Predicate<'tcx>, usize>,
99115
{
@@ -160,8 +176,31 @@ pub fn decode_ty<'a, 'tcx, D>(decoder: &mut D) -> Result<Ty<'tcx>, D::Error>
160176
}
161177

162178
#[inline]
163-
pub fn decode_predicates<'a, 'tcx, D>(decoder: &mut D)
164-
-> Result<ty::GenericPredicates<'tcx>, D::Error>
179+
pub fn decode_predicates<'a, 'tcx, D>(
180+
decoder: &mut D,
181+
) -> Result<Vec<ty::Predicate<'tcx>>, D::Error>
182+
where D: TyDecoder<'a, 'tcx>,
183+
'tcx: 'a,
184+
{
185+
(0..decoder.read_usize()?).map(|_| {
186+
// Handle shorthands first, if we have an usize > 0x80.
187+
if decoder.positioned_at_shorthand() {
188+
let pos = decoder.read_usize()?;
189+
assert!(pos >= SHORTHAND_OFFSET);
190+
let shorthand = pos - SHORTHAND_OFFSET;
191+
192+
decoder.with_position(shorthand, ty::Predicate::decode)
193+
} else {
194+
ty::Predicate::decode(decoder)
195+
}
196+
})
197+
.collect()
198+
}
199+
200+
#[inline]
201+
pub fn decode_generic_predicates<'a, 'tcx, D>(
202+
decoder: &mut D,
203+
) -> Result<ty::GenericPredicates<'tcx>, D::Error>
165204
where D: TyDecoder<'a, 'tcx>,
166205
'tcx: 'a,
167206
{
@@ -336,11 +375,19 @@ macro_rules! implement_ty_decoder {
336375
}
337376
}
338377

378+
impl<$($typaram),*> SpecializedDecoder<Vec<ty::Predicate<'tcx>>>
379+
for $DecoderName<$($typaram),*> {
380+
fn specialized_decode(&mut self)
381+
-> Result<Vec<ty::Predicate<'tcx>>, Self::Error> {
382+
decode_predicates(self)
383+
}
384+
}
385+
339386
impl<$($typaram),*> SpecializedDecoder<ty::GenericPredicates<'tcx>>
340387
for $DecoderName<$($typaram),*> {
341388
fn specialized_decode(&mut self)
342389
-> Result<ty::GenericPredicates<'tcx>, Self::Error> {
343-
decode_predicates(self)
390+
decode_generic_predicates(self)
344391
}
345392
}
346393

src/librustc/ty/query/on_disk_cache.rs

+14-1
Original file line numberDiff line numberDiff line change
@@ -891,6 +891,19 @@ impl<'enc, 'a, 'tcx, E> SpecializedEncoder<ty::Ty<'tcx>> for CacheEncoder<'enc,
891891
}
892892
}
893893

894+
impl<'enc, 'a, 'tcx, E> SpecializedEncoder<Vec<ty::Predicate<'tcx>>>
895+
for CacheEncoder<'enc, 'a, 'tcx, E>
896+
where E: 'enc + ty_codec::TyEncoder
897+
{
898+
#[inline]
899+
fn specialized_encode(&mut self,
900+
predicates: &Vec<ty::Predicate<'tcx>>)
901+
-> Result<(), Self::Error> {
902+
ty_codec::encode_predicates(self, predicates,
903+
|encoder| &mut encoder.predicate_shorthands)
904+
}
905+
}
906+
894907
impl<'enc, 'a, 'tcx, E> SpecializedEncoder<ty::GenericPredicates<'tcx>>
895908
for CacheEncoder<'enc, 'a, 'tcx, E>
896909
where E: 'enc + ty_codec::TyEncoder
@@ -899,7 +912,7 @@ impl<'enc, 'a, 'tcx, E> SpecializedEncoder<ty::GenericPredicates<'tcx>>
899912
fn specialized_encode(&mut self,
900913
predicates: &ty::GenericPredicates<'tcx>)
901914
-> Result<(), Self::Error> {
902-
ty_codec::encode_predicates(self, predicates,
915+
ty_codec::encode_generic_predicates(self, predicates,
903916
|encoder| &mut encoder.predicate_shorthands)
904917
}
905918
}

src/librustc_metadata/cstore_impl.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ provide! { <'tcx> tcx, def_id, other, cdata,
9494
generics_of => {
9595
tcx.alloc_generics(cdata.get_generics(def_id.index, tcx.sess))
9696
}
97-
predicates_of => { Lrc::new(cdata.get_predicates(def_id.index, tcx)) }
98-
predicates_defined_on => { Lrc::new(cdata.get_predicates_defined_on(def_id.index, tcx)) }
97+
explicit_predicates_of => { Lrc::new(cdata.get_explicit_predicates(def_id.index, tcx)) }
98+
inferred_outlives_of => { Lrc::new(cdata.get_inferred_outlives(def_id.index, tcx)) }
9999
super_predicates_of => { Lrc::new(cdata.get_super_predicates(def_id.index, tcx)) }
100100
trait_def => {
101101
tcx.alloc_trait_def(cdata.get_trait_def(def_id.index, tcx.sess))

src/librustc_metadata/decoder.rs

+12-10
Original file line numberDiff line numberDiff line change
@@ -617,18 +617,20 @@ impl<'a, 'tcx> CrateMetadata {
617617
tcx.alloc_adt_def(did, kind, variants, repr)
618618
}
619619

620-
pub fn get_predicates(&self,
621-
item_id: DefIndex,
622-
tcx: TyCtxt<'a, 'tcx, 'tcx>)
623-
-> ty::GenericPredicates<'tcx> {
624-
self.entry(item_id).predicates.unwrap().decode((self, tcx))
620+
pub fn get_explicit_predicates(
621+
&self,
622+
item_id: DefIndex,
623+
tcx: TyCtxt<'a, 'tcx, 'tcx>,
624+
) -> ty::GenericPredicates<'tcx> {
625+
self.entry(item_id).explicit_predicates.unwrap().decode((self, tcx))
625626
}
626627

627-
pub fn get_predicates_defined_on(&self,
628-
item_id: DefIndex,
629-
tcx: TyCtxt<'a, 'tcx, 'tcx>)
630-
-> ty::GenericPredicates<'tcx> {
631-
self.entry(item_id).predicates_defined_on.unwrap().decode((self, tcx))
628+
pub fn get_inferred_outlives(
629+
&self,
630+
item_id: DefIndex,
631+
tcx: TyCtxt<'a, 'tcx, 'tcx>,
632+
) -> Vec<ty::Predicate<'tcx>> {
633+
self.entry(item_id).inferred_outlives.unwrap().decode((self, tcx))
632634
}
633635

634636
pub fn get_super_predicates(&self,

src/librustc_metadata/encoder.rs

+53-42
Original file line numberDiff line numberDiff line change
@@ -203,11 +203,19 @@ impl<'a, 'tcx> SpecializedEncoder<interpret::AllocId> for EncodeContext<'a, 'tcx
203203
}
204204
}
205205

206+
impl<'a, 'tcx> SpecializedEncoder<Vec<ty::Predicate<'tcx>>> for EncodeContext<'a, 'tcx> {
207+
fn specialized_encode(&mut self,
208+
predicates: &Vec<ty::Predicate<'tcx>>)
209+
-> Result<(), Self::Error> {
210+
ty_codec::encode_predicates(self, predicates, |ecx| &mut ecx.predicate_shorthands)
211+
}
212+
}
213+
206214
impl<'a, 'tcx> SpecializedEncoder<ty::GenericPredicates<'tcx>> for EncodeContext<'a, 'tcx> {
207215
fn specialized_encode(&mut self,
208216
predicates: &ty::GenericPredicates<'tcx>)
209217
-> Result<(), Self::Error> {
210-
ty_codec::encode_predicates(self, predicates, |ecx| &mut ecx.predicate_shorthands)
218+
ty_codec::encode_generic_predicates(self, predicates, |ecx| &mut ecx.predicate_shorthands)
211219
}
212220
}
213221

@@ -613,8 +621,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
613621
LazySeq::empty()
614622
},
615623
generics: Some(self.encode_generics(def_id)),
616-
predicates: Some(self.encode_predicates(def_id)),
617-
predicates_defined_on: None,
624+
explicit_predicates: Some(self.encode_explicit_predicates(def_id)),
625+
inferred_outlives: Some(self.encode_inferred_outlives(def_id)),
618626

619627
mir: self.encode_optimized_mir(def_id),
620628
}
@@ -669,8 +677,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
669677
LazySeq::empty()
670678
},
671679
generics: Some(self.encode_generics(def_id)),
672-
predicates: Some(self.encode_predicates(def_id)),
673-
predicates_defined_on: None,
680+
explicit_predicates: Some(self.encode_explicit_predicates(def_id)),
681+
inferred_outlives: Some(self.encode_inferred_outlives(def_id)),
674682

675683
mir: self.encode_optimized_mir(def_id),
676684
}
@@ -707,8 +715,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
707715
inherent_impls: LazySeq::empty(),
708716
variances: LazySeq::empty(),
709717
generics: None,
710-
predicates: None,
711-
predicates_defined_on: None,
718+
explicit_predicates: None,
719+
inferred_outlives: None,
712720

713721
mir: None
714722
}
@@ -748,8 +756,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
748756
inherent_impls: LazySeq::empty(),
749757
variances: LazySeq::empty(),
750758
generics: Some(self.encode_generics(def_id)),
751-
predicates: Some(self.encode_predicates(def_id)),
752-
predicates_defined_on: None,
759+
explicit_predicates: Some(self.encode_explicit_predicates(def_id)),
760+
inferred_outlives: Some(self.encode_inferred_outlives(def_id)),
753761

754762
mir: None,
755763
}
@@ -808,8 +816,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
808816
LazySeq::empty()
809817
},
810818
generics: Some(self.encode_generics(def_id)),
811-
predicates: Some(self.encode_predicates(def_id)),
812-
predicates_defined_on: None,
819+
explicit_predicates: Some(self.encode_explicit_predicates(def_id)),
820+
inferred_outlives: Some(self.encode_inferred_outlives(def_id)),
813821

814822
mir: self.encode_optimized_mir(def_id),
815823
}
@@ -821,16 +829,16 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
821829
self.lazy(tcx.generics_of(def_id))
822830
}
823831

824-
fn encode_predicates(&mut self, def_id: DefId) -> Lazy<ty::GenericPredicates<'tcx>> {
825-
debug!("IsolatedEncoder::encode_predicates({:?})", def_id);
832+
fn encode_explicit_predicates(&mut self, def_id: DefId) -> Lazy<ty::GenericPredicates<'tcx>> {
833+
debug!("IsolatedEncoder::encode_explicit_predicates({:?})", def_id);
826834
let tcx = self.tcx;
827-
self.lazy(&tcx.predicates_of(def_id))
835+
self.lazy(&tcx.explicit_predicates_of(def_id))
828836
}
829837

830-
fn encode_predicates_defined_on(&mut self, def_id: DefId) -> Lazy<ty::GenericPredicates<'tcx>> {
831-
debug!("IsolatedEncoder::encode_predicates_defined_on({:?})", def_id);
838+
fn encode_inferred_outlives(&mut self, def_id: DefId) -> Lazy<Vec<ty::Predicate<'tcx>>> {
839+
debug!("IsolatedEncoder::encode_inferred_outlives({:?})", def_id);
832840
let tcx = self.tcx;
833-
self.lazy(&tcx.predicates_defined_on(def_id))
841+
self.lazy(&tcx.inferred_outlives_of(def_id))
834842
}
835843

836844
fn encode_info_for_trait_item(&mut self, def_id: DefId) -> Entry<'tcx> {
@@ -924,8 +932,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
924932
LazySeq::empty()
925933
},
926934
generics: Some(self.encode_generics(def_id)),
927-
predicates: Some(self.encode_predicates(def_id)),
928-
predicates_defined_on: None,
935+
explicit_predicates: Some(self.encode_explicit_predicates(def_id)),
936+
inferred_outlives: Some(self.encode_inferred_outlives(def_id)),
929937

930938
mir: self.encode_optimized_mir(def_id),
931939
}
@@ -1023,8 +1031,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
10231031
LazySeq::empty()
10241032
},
10251033
generics: Some(self.encode_generics(def_id)),
1026-
predicates: Some(self.encode_predicates(def_id)),
1027-
predicates_defined_on: None,
1034+
explicit_predicates: Some(self.encode_explicit_predicates(def_id)),
1035+
inferred_outlives: Some(self.encode_inferred_outlives(def_id)),
10281036

10291037
mir: if mir { self.encode_optimized_mir(def_id) } else { None },
10301038
}
@@ -1280,7 +1288,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
12801288
hir::ItemKind::TraitAlias(..) => Some(self.encode_generics(def_id)),
12811289
_ => None,
12821290
},
1283-
predicates: match item.node {
1291+
explicit_predicates: match item.node {
12841292
hir::ItemKind::Static(..) |
12851293
hir::ItemKind::Const(..) |
12861294
hir::ItemKind::Fn(..) |
@@ -1291,19 +1299,22 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
12911299
hir::ItemKind::Impl(..) |
12921300
hir::ItemKind::Existential(..) |
12931301
hir::ItemKind::Trait(..) |
1294-
hir::ItemKind::TraitAlias(..) => Some(self.encode_predicates(def_id)),
1302+
hir::ItemKind::TraitAlias(..) => Some(self.encode_explicit_predicates(def_id)),
12951303
_ => None,
12961304
},
1297-
1298-
// The only time that `predicates_defined_on` is used (on
1299-
// an external item) is for traits, during chalk lowering,
1300-
// so only encode it in that case as an efficiency
1301-
// hack. (No reason not to expand it in the future if
1302-
// necessary.)
1303-
predicates_defined_on: match item.node {
1305+
inferred_outlives: match item.node {
1306+
hir::ItemKind::Static(..) |
1307+
hir::ItemKind::Const(..) |
1308+
hir::ItemKind::Fn(..) |
1309+
hir::ItemKind::Ty(..) |
1310+
hir::ItemKind::Enum(..) |
1311+
hir::ItemKind::Struct(..) |
1312+
hir::ItemKind::Union(..) |
1313+
hir::ItemKind::Impl(..) |
1314+
hir::ItemKind::Existential(..) |
13041315
hir::ItemKind::Trait(..) |
1305-
hir::ItemKind::TraitAlias(..) => Some(self.encode_predicates_defined_on(def_id)),
1306-
_ => None, // not *wrong* for other kinds of items, but not needed
1316+
hir::ItemKind::TraitAlias(..) => Some(self.encode_inferred_outlives(def_id)),
1317+
_ => None,
13071318
},
13081319

13091320
mir: match item.node {
@@ -1352,8 +1363,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
13521363
inherent_impls: LazySeq::empty(),
13531364
variances: LazySeq::empty(),
13541365
generics: None,
1355-
predicates: None,
1356-
predicates_defined_on: None,
1366+
explicit_predicates: None,
1367+
inferred_outlives: None,
13571368
mir: None,
13581369
}
13591370
}
@@ -1377,8 +1388,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
13771388
inherent_impls: LazySeq::empty(),
13781389
variances: LazySeq::empty(),
13791390
generics: None,
1380-
predicates: None,
1381-
predicates_defined_on: None,
1391+
explicit_predicates: None,
1392+
inferred_outlives: None,
13821393

13831394
mir: None,
13841395
}
@@ -1437,8 +1448,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
14371448
inherent_impls: LazySeq::empty(),
14381449
variances: LazySeq::empty(),
14391450
generics: Some(self.encode_generics(def_id)),
1440-
predicates: None,
1441-
predicates_defined_on: None,
1451+
explicit_predicates: None,
1452+
inferred_outlives: None,
14421453

14431454
mir: self.encode_optimized_mir(def_id),
14441455
}
@@ -1465,8 +1476,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
14651476
inherent_impls: LazySeq::empty(),
14661477
variances: LazySeq::empty(),
14671478
generics: Some(self.encode_generics(def_id)),
1468-
predicates: Some(self.encode_predicates(def_id)),
1469-
predicates_defined_on: None,
1479+
explicit_predicates: Some(self.encode_explicit_predicates(def_id)),
1480+
inferred_outlives: Some(self.encode_inferred_outlives(def_id)),
14701481

14711482
mir: self.encode_optimized_mir(def_id),
14721483
}
@@ -1668,8 +1679,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
16681679
_ => LazySeq::empty(),
16691680
},
16701681
generics: Some(self.encode_generics(def_id)),
1671-
predicates: Some(self.encode_predicates(def_id)),
1672-
predicates_defined_on: None,
1682+
explicit_predicates: Some(self.encode_explicit_predicates(def_id)),
1683+
inferred_outlives: Some(self.encode_inferred_outlives(def_id)),
16731684

16741685
mir: None,
16751686
}

0 commit comments

Comments
 (0)