Auto merge of #42709 - stepancheg:discriminant-hash, r=jseyfried
deriv(Hash) for single-variant enum should not hash discriminant Fixes #39137
This commit is contained in:
commit
5bc8941638
6 changed files with 20 additions and 10 deletions
|
@ -305,10 +305,10 @@ pub enum StaticFields {
|
|||
/// A summary of the possible sets of fields.
|
||||
pub enum SubstructureFields<'a> {
|
||||
Struct(&'a ast::VariantData, Vec<FieldInfo<'a>>),
|
||||
/// Matching variants of the enum: variant index, ast::Variant,
|
||||
/// Matching variants of the enum: variant index, variant count, ast::Variant,
|
||||
/// fields: the field name is only non-`None` in the case of a struct
|
||||
/// variant.
|
||||
EnumMatching(usize, &'a ast::Variant, Vec<FieldInfo<'a>>),
|
||||
EnumMatching(usize, usize, &'a ast::Variant, Vec<FieldInfo<'a>>),
|
||||
|
||||
/// Non-matching variants of the enum, but with all state hidden from
|
||||
/// the consequent code. The first component holds `Ident`s for all of
|
||||
|
@ -1252,7 +1252,7 @@ impl<'a> MethodDef<'a> {
|
|||
// expressions for referencing every field of every
|
||||
// Self arg, assuming all are instances of VariantK.
|
||||
// Build up code associated with such a case.
|
||||
let substructure = EnumMatching(index, variant, field_tuples);
|
||||
let substructure = EnumMatching(index, variants.len(), variant, field_tuples);
|
||||
let arm_expr = self.call_substructure_method(cx,
|
||||
trait_,
|
||||
type_ident,
|
||||
|
@ -1269,12 +1269,13 @@ impl<'a> MethodDef<'a> {
|
|||
// We need a default case that handles the fieldless variants.
|
||||
// The index and actual variant aren't meaningful in this case,
|
||||
// so just use whatever
|
||||
let substructure = EnumMatching(0, variants.len(), v, Vec::new());
|
||||
Some(self.call_substructure_method(cx,
|
||||
trait_,
|
||||
type_ident,
|
||||
&self_args[..],
|
||||
nonself_args,
|
||||
&EnumMatching(0, v, Vec::new())))
|
||||
&substructure))
|
||||
}
|
||||
_ if variants.len() > 1 && self_args.len() > 1 => {
|
||||
// Since we know that all the arguments will match if we reach
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue