Rollup merge of #76641 - nox:pointee-random-stuff, r=eddyb
Some cleanup changes and commenting r? @nikomatsakis Cc @eddyb
This commit is contained in:
commit
0bcc96dd3d
4 changed files with 13 additions and 22 deletions
|
@ -2280,6 +2280,12 @@ impl<'tcx> TyS<'tcx> {
|
||||||
///
|
///
|
||||||
/// Returning true means the type is known to be sized. Returning
|
/// Returning true means the type is known to be sized. Returning
|
||||||
/// `false` means nothing -- could be sized, might not be.
|
/// `false` means nothing -- could be sized, might not be.
|
||||||
|
///
|
||||||
|
/// Note that we could never rely on the fact that a type such as `[_]` is
|
||||||
|
/// trivially `!Sized` because we could be in a type environment with a
|
||||||
|
/// bound such as `[_]: Copy`. A function with such a bound obviously never
|
||||||
|
/// can be called, but that doesn't mean it shouldn't typecheck. This is why
|
||||||
|
/// this method doesn't return `Option<bool>`.
|
||||||
pub fn is_trivially_sized(&self, tcx: TyCtxt<'tcx>) -> bool {
|
pub fn is_trivially_sized(&self, tcx: TyCtxt<'tcx>) -> bool {
|
||||||
match self.kind() {
|
match self.kind() {
|
||||||
ty::Infer(ty::IntVar(_) | ty::FloatVar(_))
|
ty::Infer(ty::IntVar(_) | ty::FloatVar(_))
|
||||||
|
|
|
@ -1512,12 +1512,7 @@ impl<'a, 'tcx> InferCtxtPrivExt<'tcx> for InferCtxt<'a, 'tcx> {
|
||||||
// avoid inundating the user with unnecessary errors, but we now
|
// avoid inundating the user with unnecessary errors, but we now
|
||||||
// check upstream for type errors and don't add the obligations to
|
// check upstream for type errors and don't add the obligations to
|
||||||
// begin with in those cases.
|
// begin with in those cases.
|
||||||
if self
|
if self.tcx.lang_items().sized_trait() == Some(trait_ref.def_id()) {
|
||||||
.tcx
|
|
||||||
.lang_items()
|
|
||||||
.sized_trait()
|
|
||||||
.map_or(false, |sized_id| sized_id == trait_ref.def_id())
|
|
||||||
{
|
|
||||||
self.need_type_info_err(body_id, span, self_ty, ErrorCode::E0282).emit();
|
self.need_type_info_err(body_id, span, self_ty, ErrorCode::E0282).emit();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,25 +110,15 @@ impl<'tcx> chalk_solve::RustIrDatabase<RustInterner<'tcx>> for RustIrDatabase<'t
|
||||||
.map(|i| chalk_ir::AssocTypeId(i.def_id))
|
.map(|i| chalk_ir::AssocTypeId(i.def_id))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let well_known = if self
|
let well_known = if self.interner.tcx.lang_items().sized_trait() == Some(def_id) {
|
||||||
.interner
|
|
||||||
.tcx
|
|
||||||
.lang_items()
|
|
||||||
.sized_trait()
|
|
||||||
.map(|t| def_id == t)
|
|
||||||
.unwrap_or(false)
|
|
||||||
{
|
|
||||||
Some(chalk_solve::rust_ir::WellKnownTrait::Sized)
|
Some(chalk_solve::rust_ir::WellKnownTrait::Sized)
|
||||||
} else if self.interner.tcx.lang_items().copy_trait().map(|t| def_id == t).unwrap_or(false)
|
} else if self.interner.tcx.lang_items().copy_trait() == Some(def_id) {
|
||||||
{
|
|
||||||
Some(chalk_solve::rust_ir::WellKnownTrait::Copy)
|
Some(chalk_solve::rust_ir::WellKnownTrait::Copy)
|
||||||
} else if self.interner.tcx.lang_items().clone_trait().map(|t| def_id == t).unwrap_or(false)
|
} else if self.interner.tcx.lang_items().clone_trait() == Some(def_id) {
|
||||||
{
|
|
||||||
Some(chalk_solve::rust_ir::WellKnownTrait::Clone)
|
Some(chalk_solve::rust_ir::WellKnownTrait::Clone)
|
||||||
} else if self.interner.tcx.lang_items().drop_trait().map(|t| def_id == t).unwrap_or(false)
|
} else if self.interner.tcx.lang_items().drop_trait() == Some(def_id) {
|
||||||
{
|
|
||||||
Some(chalk_solve::rust_ir::WellKnownTrait::Drop)
|
Some(chalk_solve::rust_ir::WellKnownTrait::Drop)
|
||||||
} else if self.interner.tcx.lang_items().fn_trait().map(|t| def_id == t).unwrap_or(false) {
|
} else if self.interner.tcx.lang_items().fn_trait() == Some(def_id) {
|
||||||
Some(chalk_solve::rust_ir::WellKnownTrait::Fn)
|
Some(chalk_solve::rust_ir::WellKnownTrait::Fn)
|
||||||
} else if self
|
} else if self
|
||||||
.interner
|
.interner
|
||||||
|
|
|
@ -840,7 +840,7 @@ impl<'a, 'tcx> Clean<Generics> for (&'a ty::Generics, ty::GenericPredicates<'tcx
|
||||||
let mut where_predicates =
|
let mut where_predicates =
|
||||||
where_predicates.into_iter().flat_map(|p| p.clean(cx)).collect::<Vec<_>>();
|
where_predicates.into_iter().flat_map(|p| p.clean(cx)).collect::<Vec<_>>();
|
||||||
|
|
||||||
// Type parameters and have a Sized bound by default unless removed with
|
// Type parameters have a Sized bound by default unless removed with
|
||||||
// ?Sized. Scan through the predicates and mark any type parameter with
|
// ?Sized. Scan through the predicates and mark any type parameter with
|
||||||
// a Sized bound, removing the bounds as we find them.
|
// a Sized bound, removing the bounds as we find them.
|
||||||
//
|
//
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue