Skip to content

Commit 41b6da1

Browse files
authored
Rollup merge of #145018 - AlexanderPortland:rustc-public-hash, r=scottmcm
Derive `Hash` for rustc_public types This derives `Hash` for the rustc_public versions of `Rvalue`, `Place`, `Span`, and all the types they contain. As far as I can tell, the internal versions of all these types already implement `Hash`, so it would be helpful if the public versions implemented it too!
2 parents 1029eea + b9e6bd7 commit 41b6da1

File tree

2 files changed

+33
-33
lines changed

2 files changed

+33
-33
lines changed

compiler/rustc_public/src/mir/body.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ impl AssertMessage {
349349
}
350350
}
351351

352-
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize)]
352+
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize)]
353353
pub enum BinOp {
354354
Add,
355355
AddUnchecked,
@@ -384,7 +384,7 @@ impl BinOp {
384384
}
385385
}
386386

387-
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize)]
387+
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize)]
388388
pub enum UnOp {
389389
Not,
390390
Neg,
@@ -490,7 +490,7 @@ pub enum StatementKind {
490490
Nop,
491491
}
492492

493-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
493+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
494494
pub enum Rvalue {
495495
/// Creates a pointer with the indicated mutability to the place.
496496
///
@@ -666,7 +666,7 @@ impl Rvalue {
666666
}
667667
}
668668

669-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
669+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
670670
pub enum AggregateKind {
671671
Array(Ty),
672672
Tuple,
@@ -677,14 +677,14 @@ pub enum AggregateKind {
677677
RawPtr(Ty, Mutability),
678678
}
679679

680-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
680+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
681681
pub enum Operand {
682682
Copy(Place),
683683
Move(Place),
684684
Constant(ConstOperand),
685685
}
686686

687-
#[derive(Clone, Eq, PartialEq, Serialize)]
687+
#[derive(Clone, Eq, PartialEq, Hash, Serialize)]
688688
pub struct Place {
689689
pub local: Local,
690690
/// projection out of a place (access a field, deref a pointer, etc)
@@ -697,7 +697,7 @@ impl From<Local> for Place {
697697
}
698698
}
699699

700-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
700+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
701701
pub struct ConstOperand {
702702
pub span: Span,
703703
pub user_ty: Option<UserTypeAnnotationIndex>,
@@ -770,7 +770,7 @@ pub enum VarDebugInfoContents {
770770
// ProjectionElem<Local, Ty>) and user-provided type annotations (for which the projection elements
771771
// are of type ProjectionElem<(), ()>).
772772
// In rustc_public's IR we don't need this generality, so we just use ProjectionElem for Places.
773-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
773+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
774774
pub enum ProjectionElem {
775775
/// Dereference projections (e.g. `*_1`) project to the address referenced by the base place.
776776
Deref,
@@ -913,7 +913,7 @@ impl SwitchTargets {
913913
}
914914
}
915915

916-
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize)]
916+
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize)]
917917
pub enum BorrowKind {
918918
/// Data must be immutable and is aliasable.
919919
Shared,
@@ -940,7 +940,7 @@ impl BorrowKind {
940940
}
941941
}
942942

943-
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize)]
943+
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize)]
944944
pub enum RawPtrKind {
945945
Mut,
946946
Const,
@@ -958,14 +958,14 @@ impl RawPtrKind {
958958
}
959959
}
960960

961-
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize)]
961+
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize)]
962962
pub enum MutBorrowKind {
963963
Default,
964964
TwoPhaseBorrow,
965965
ClosureCapture,
966966
}
967967

968-
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize)]
968+
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize)]
969969
pub enum FakeBorrowKind {
970970
/// A shared (deep) borrow. Data must be immutable and is aliasable.
971971
Deep,
@@ -982,13 +982,13 @@ pub enum Mutability {
982982
Mut,
983983
}
984984

985-
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize)]
985+
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize)]
986986
pub enum Safety {
987987
Safe,
988988
Unsafe,
989989
}
990990

991-
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize)]
991+
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize)]
992992
pub enum PointerCoercion {
993993
/// Go from a fn-item type to a fn-pointer type.
994994
ReifyFnPointer,
@@ -1015,7 +1015,7 @@ pub enum PointerCoercion {
10151015
Unsize,
10161016
}
10171017

1018-
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize)]
1018+
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize)]
10191019
pub enum CastKind {
10201020
// FIXME(smir-rename): rename this to PointerExposeProvenance
10211021
PointerExposeAddress,
@@ -1030,7 +1030,7 @@ pub enum CastKind {
10301030
Transmute,
10311031
}
10321032

1033-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
1033+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
10341034
pub enum NullOp {
10351035
/// Returns the size of a value of that type.
10361036
SizeOf,

compiler/rustc_public/src/ty.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ pub enum Pattern {
113113
}
114114

115115
/// Represents a constant in the type system
116-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
116+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
117117
pub struct TyConst {
118118
pub(crate) kind: TyConstKind,
119119
pub id: TyConstId,
@@ -140,7 +140,7 @@ impl TyConst {
140140
}
141141
}
142142

143-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
143+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
144144
pub enum TyConstKind {
145145
Param(ParamConst),
146146
Bound(DebruijnIndex, BoundVar),
@@ -151,11 +151,11 @@ pub enum TyConstKind {
151151
ZSTValue(Ty),
152152
}
153153

154-
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize)]
154+
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize)]
155155
pub struct TyConstId(usize);
156156

157157
/// Represents a constant in MIR
158-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
158+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
159159
pub struct MirConst {
160160
/// The constant kind.
161161
pub(crate) kind: ConstantKind,
@@ -212,17 +212,17 @@ impl MirConst {
212212
}
213213
}
214214

215-
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize)]
215+
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize)]
216216
pub struct MirConstId(usize);
217217

218218
type Ident = Opaque;
219219

220-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
220+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
221221
pub struct Region {
222222
pub kind: RegionKind,
223223
}
224224

225-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
225+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
226226
pub enum RegionKind {
227227
ReEarlyParam(EarlyParamRegion),
228228
ReBound(DebruijnIndex, BoundRegion),
@@ -233,29 +233,29 @@ pub enum RegionKind {
233233

234234
pub(crate) type DebruijnIndex = u32;
235235

236-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
236+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
237237
pub struct EarlyParamRegion {
238238
pub index: u32,
239239
pub name: Symbol,
240240
}
241241

242242
pub(crate) type BoundVar = u32;
243243

244-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
244+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
245245
pub struct BoundRegion {
246246
pub var: BoundVar,
247247
pub kind: BoundRegionKind,
248248
}
249249

250250
pub(crate) type UniverseIndex = u32;
251251

252-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
252+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
253253
pub struct Placeholder<T> {
254254
pub universe: UniverseIndex,
255255
pub bound: T,
256256
}
257257

258-
#[derive(Clone, Copy, PartialEq, Eq, Serialize)]
258+
#[derive(Clone, Copy, PartialEq, Eq, Hash, Serialize)]
259259
pub struct Span(usize);
260260

261261
impl Debug for Span {
@@ -997,7 +997,7 @@ crate_def! {
997997
}
998998

999999
/// A list of generic arguments.
1000-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
1000+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
10011001
pub struct GenericArgs(pub Vec<GenericArgKind>);
10021002

10031003
impl std::ops::Index<ParamTy> for GenericArgs {
@@ -1016,7 +1016,7 @@ impl std::ops::Index<ParamConst> for GenericArgs {
10161016
}
10171017
}
10181018

1019-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
1019+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
10201020
pub enum GenericArgKind {
10211021
Lifetime(Region),
10221022
Type(Ty),
@@ -1199,7 +1199,7 @@ pub enum BoundTyKind {
11991199
Param(ParamDef, String),
12001200
}
12011201

1202-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
1202+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
12031203
pub enum BoundRegionKind {
12041204
BrAnon,
12051205
BrNamed(BrNamedDef, String),
@@ -1354,7 +1354,7 @@ impl Allocation {
13541354
}
13551355
}
13561356

1357-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
1357+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
13581358
pub enum ConstantKind {
13591359
Ty(TyConst),
13601360
Allocated(Allocation),
@@ -1365,13 +1365,13 @@ pub enum ConstantKind {
13651365
ZeroSized,
13661366
}
13671367

1368-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
1368+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
13691369
pub struct ParamConst {
13701370
pub index: u32,
13711371
pub name: String,
13721372
}
13731373

1374-
#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
1374+
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize)]
13751375
pub struct UnevaluatedConst {
13761376
pub def: ConstDef,
13771377
pub args: GenericArgs,

0 commit comments

Comments
 (0)