@@ -28,9 +28,9 @@ use crate::ty::subst::{GenericArg, InternalSubsts, Subst, SubstsRef};
28
28
use crate :: ty:: util:: Discr ;
29
29
use rustc_ast as ast;
30
30
use rustc_attr as attr;
31
- use rustc_data_structures:: fx:: { FxHashMap , FxHashSet , FxIndexMap } ;
32
31
use rustc_data_structures:: intern:: Interned ;
33
- use rustc_data_structures:: stable_hasher:: { HashStable , StableHasher } ;
32
+ use rustc_data_structures:: fx:: { FxHashMap , FxHashSet } ;
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;
36
36
use rustc_hir:: def:: { CtorKind , CtorOf , DefKind , Res } ;
@@ -444,7 +444,31 @@ static BOOL_TYS: TyS<'static> = TyS {
444
444
outer_exclusive_binder : DebruijnIndex :: from_usize ( 0 ) ,
445
445
} ;
446
446
447
- impl < ' a , ' tcx > HashStable < StableHashingContext < ' a > > for Ty < ' tcx > {
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 > {
458
+ fn hash_stable_eq ( & self , other : Self ) -> bool {
459
+ self == other
460
+ }
461
+ }
462
+
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)
468
+ }
469
+ }
470
+
471
+ impl < ' a , ' tcx > HashStable < StableHashingContext < ' a > > for TyS < ' tcx > {
448
472
fn hash_stable ( & self , hcx : & mut StableHashingContext < ' a > , hasher : & mut StableHasher ) {
449
473
let TyS {
450
474
ref kind,
0 commit comments