Fix a variant index and variant discriminant confusion
Previously for enums using the `Variants::Single` layout, the variant index was being confused with its discriminant. For example, in the case of `enum E { A = 1 }`. Use `discriminant_for_variant` to avoid the issue.
This commit is contained in:
parent
d5a91f3114
commit
c3e71d83cd
1 changed files with 4 additions and 1 deletions
|
@ -55,7 +55,10 @@ fn variant_discriminants<'tcx>(
|
||||||
match &layout.variants {
|
match &layout.variants {
|
||||||
Variants::Single { index } => {
|
Variants::Single { index } => {
|
||||||
let mut res = FxHashSet::default();
|
let mut res = FxHashSet::default();
|
||||||
res.insert(index.as_u32() as u128);
|
res.insert(
|
||||||
|
ty.discriminant_for_variant(tcx, *index)
|
||||||
|
.map_or(index.as_u32() as u128, |discr| discr.val),
|
||||||
|
);
|
||||||
res
|
res
|
||||||
}
|
}
|
||||||
Variants::Multiple { variants, .. } => variants
|
Variants::Multiple { variants, .. } => variants
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue