mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Merge ref '733dab558992' from rust-lang/rust
Pull recent changes from https://github.com/rust-lang/rust via Josh. Upstream ref: 733dab558992d902d6d17576de1da768094e2cf3 Filtered ref: 8f0faf94fb41d4e2a85ef2d23e5495f6bea1f31d This merge was created using https://github.com/rust-lang/josh-sync.
This commit is contained in:
commit
5f45867ee6
@ -3,9 +3,9 @@
|
|||||||
use std::{cmp, ops::Bound};
|
use std::{cmp, ops::Bound};
|
||||||
|
|
||||||
use hir_def::{
|
use hir_def::{
|
||||||
AdtId, VariantId,
|
|
||||||
layout::{Integer, ReprOptions, TargetDataLayout},
|
layout::{Integer, ReprOptions, TargetDataLayout},
|
||||||
signatures::{StructFlags, VariantFields},
|
signatures::{StructFlags, VariantFields},
|
||||||
|
AdtId, VariantId,
|
||||||
};
|
};
|
||||||
use intern::sym;
|
use intern::sym;
|
||||||
use rustc_index::IndexVec;
|
use rustc_index::IndexVec;
|
||||||
@ -13,9 +13,9 @@ use smallvec::SmallVec;
|
|||||||
use triomphe::Arc;
|
use triomphe::Arc;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
Substitution, TraitEnvironment,
|
|
||||||
db::HirDatabase,
|
db::HirDatabase,
|
||||||
layout::{Layout, LayoutError, field_ty},
|
layout::{field_ty, Layout, LayoutError},
|
||||||
|
Substitution, TraitEnvironment,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::LayoutCx;
|
use super::LayoutCx;
|
||||||
@ -85,16 +85,6 @@ pub fn layout_of_adt_query(
|
|||||||
let d = db.const_eval_discriminant(e.enum_variants(db).variants[id.0].0).ok()?;
|
let d = db.const_eval_discriminant(e.enum_variants(db).variants[id.0].0).ok()?;
|
||||||
Some((id, d))
|
Some((id, d))
|
||||||
}),
|
}),
|
||||||
// FIXME: The current code for niche-filling relies on variant indices
|
|
||||||
// instead of actual discriminants, so enums with
|
|
||||||
// explicit discriminants (RFC #2363) would misbehave and we should disable
|
|
||||||
// niche optimization for them.
|
|
||||||
// The code that do it in rustc:
|
|
||||||
// repr.inhibit_enum_layout_opt() || def
|
|
||||||
// .variants()
|
|
||||||
// .iter_enumerated()
|
|
||||||
// .any(|(i, v)| v.discr != ty::VariantDiscr::Relative(i.as_u32()))
|
|
||||||
repr.inhibit_enum_layout_opt(),
|
|
||||||
!matches!(def, AdtId::EnumId(..))
|
!matches!(def, AdtId::EnumId(..))
|
||||||
&& variants
|
&& variants
|
||||||
.iter()
|
.iter()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user