@@ -29,7 +29,7 @@ use crate::ty::util::Discr;
29
29
use rustc_ast as ast;
30
30
use rustc_attr as attr;
31
31
use rustc_data_structures:: intern:: Interned ;
32
- use rustc_data_structures:: fx:: { FxHashMap , FxHashSet } ;
32
+ use rustc_data_structures:: fx:: { FxHashMap , FxIndexMap , FxHashSet } ;
33
33
use rustc_data_structures:: stable_hasher:: { HashStable , HashStableEq , StableHasher } ;
34
34
use rustc_data_structures:: tagged_ptr:: CopyTaggedPtr ;
35
35
use rustc_hir as hir;
@@ -43,7 +43,7 @@ use rustc_span::symbol::{kw, Ident, Symbol};
43
43
use rustc_span:: { sym, Span } ;
44
44
use rustc_target:: abi:: Align ;
45
45
46
- use std:: hash:: Hash ;
46
+ use std:: hash:: { Hash , Hasher } ;
47
47
use std:: ops:: ControlFlow ;
48
48
use std:: { fmt, str} ;
49
49
@@ -444,31 +444,23 @@ static BOOL_TYS: TyS<'static> = TyS {
444
444
outer_exclusive_binder : DebruijnIndex :: from_usize ( 0 ) ,
445
445
} ;
446
446
447
- impl < ' tcx > PartialEq for TyS < ' tcx > {
448
- #[ inline]
449
- fn eq ( & self , other : & TyS < ' tcx > ) -> bool {
450
- // Pointer equality implies equality (due to the unique contents
451
- // assumption).
452
- ptr:: eq ( self , other)
453
- }
454
- }
455
- impl < ' tcx > Eq for TyS < ' tcx > { }
456
-
457
- impl < ' tcx > HashStableEq for TyS < ' tcx > {
447
+ impl < ' tcx > HashStableEq for Ty < ' tcx > {
458
448
fn hash_stable_eq ( & self , other : & Self ) -> bool {
459
- self == other
460
- }
461
- }
449
+ let TyS {
450
+ ref kind,
451
+
452
+ // The other fields just provide fast access to information that is
453
+ // also contained in `kind`, so no need to compare them.
454
+ flags : _,
455
+
456
+ outer_exclusive_binder : _,
457
+ } = self . 0 . 0 ;
462
458
463
- impl < ' tcx > Hash for TyS < ' tcx > {
464
- fn hash < H : Hasher > ( & self , s : & mut H ) {
465
- // Pointer hashing is sufficient (due to the unique contents
466
- // assumption).
467
- ( self as * const TyS < ' _ > ) . hash ( s)
459
+ kind. hash_stable_eq ( other. kind ( ) )
468
460
}
469
461
}
470
462
471
- impl < ' a , ' tcx > HashStable < StableHashingContext < ' a > > for TyS < ' tcx > {
463
+ impl < ' a , ' tcx > HashStable < StableHashingContext < ' a > > for Ty < ' tcx > {
472
464
fn hash_stable ( & self , hcx : & mut StableHashingContext < ' a > , hasher : & mut StableHasher ) {
473
465
let TyS {
474
466
ref kind,
0 commit comments