Rollup merge of #81072 - RalfJung:place-ref-ty, r=oli-obk
PlaceRef::ty: use method call syntax
This commit is contained in:
commit
3382771dfd
@ -119,7 +119,7 @@ fn process_place(
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
if is_consume {
|
if is_consume {
|
||||||
let base_ty = mir::PlaceRef::ty(&place_base, self.fx.mir, cx.tcx());
|
let base_ty = place_base.ty(self.fx.mir, cx.tcx());
|
||||||
let base_ty = self.fx.monomorphize(base_ty);
|
let base_ty = self.fx.monomorphize(base_ty);
|
||||||
|
|
||||||
// ZSTs don't require any actual memory access.
|
// ZSTs don't require any actual memory access.
|
||||||
|
@ -506,7 +506,7 @@ pub fn codegen_place(
|
|||||||
|
|
||||||
pub fn monomorphized_place_ty(&self, place_ref: mir::PlaceRef<'tcx>) -> Ty<'tcx> {
|
pub fn monomorphized_place_ty(&self, place_ref: mir::PlaceRef<'tcx>) -> Ty<'tcx> {
|
||||||
let tcx = self.cx.tcx();
|
let tcx = self.cx.tcx();
|
||||||
let place_ty = mir::PlaceRef::ty(&place_ref, self.mir, tcx);
|
let place_ty = place_ref.ty(self.mir, tcx);
|
||||||
self.monomorphize(place_ty.ty)
|
self.monomorphize(place_ty.ty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -289,7 +289,7 @@ pub(in crate::borrow_check) fn report_use_of_moved_or_uninitialized(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let ty = PlaceRef::ty(&used_place, self.body, self.infcx.tcx).ty;
|
let ty = used_place.ty(self.body, self.infcx.tcx).ty;
|
||||||
let needs_note = match ty.kind() {
|
let needs_note = match ty.kind() {
|
||||||
ty::Closure(id, _) => {
|
ty::Closure(id, _) => {
|
||||||
let tables = self.infcx.tcx.typeck(id.expect_local());
|
let tables = self.infcx.tcx.typeck(id.expect_local());
|
||||||
@ -728,6 +728,8 @@ pub(in crate::borrow_check) fn describe_place_for_conflicting_borrow(
|
|||||||
// Define a small closure that we can use to check if the type of a place
|
// Define a small closure that we can use to check if the type of a place
|
||||||
// is a union.
|
// is a union.
|
||||||
let union_ty = |place_base| {
|
let union_ty = |place_base| {
|
||||||
|
// Need to use fn call syntax `PlaceRef::ty` to determine the type of `place_base`;
|
||||||
|
// using a type annotation in the closure argument instead leads to a lifetime error.
|
||||||
let ty = PlaceRef::ty(&place_base, self.body, self.infcx.tcx).ty;
|
let ty = PlaceRef::ty(&place_base, self.body, self.infcx.tcx).ty;
|
||||||
ty.ty_adt_def().filter(|adt| adt.is_union()).map(|_| ty)
|
ty.ty_adt_def().filter(|adt| adt.is_union()).map(|_| ty)
|
||||||
};
|
};
|
||||||
|
@ -1743,7 +1743,7 @@ fn check_if_path_or_subpath_is_moved(
|
|||||||
if let Some((place_base, ProjectionElem::Subslice { from, to, from_end: false })) =
|
if let Some((place_base, ProjectionElem::Subslice { from, to, from_end: false })) =
|
||||||
place_span.0.last_projection()
|
place_span.0.last_projection()
|
||||||
{
|
{
|
||||||
let place_ty = PlaceRef::ty(&place_base, self.body(), self.infcx.tcx);
|
let place_ty = place_base.ty(self.body(), self.infcx.tcx);
|
||||||
if let ty::Array(..) = place_ty.ty.kind() {
|
if let ty::Array(..) = place_ty.ty.kind() {
|
||||||
self.check_if_subslice_element_is_moved(
|
self.check_if_subslice_element_is_moved(
|
||||||
location,
|
location,
|
||||||
@ -1854,7 +1854,7 @@ fn check_if_assigned_path_is_moved(
|
|||||||
// assigning to `P.f` requires `P` itself
|
// assigning to `P.f` requires `P` itself
|
||||||
// be already initialized
|
// be already initialized
|
||||||
let tcx = self.infcx.tcx;
|
let tcx = self.infcx.tcx;
|
||||||
let base_ty = PlaceRef::ty(&place_base, self.body(), tcx).ty;
|
let base_ty = place_base.ty(self.body(), tcx).ty;
|
||||||
match base_ty.kind() {
|
match base_ty.kind() {
|
||||||
ty::Adt(def, _) if def.has_dtor(tcx) => {
|
ty::Adt(def, _) if def.has_dtor(tcx) => {
|
||||||
self.check_if_path_or_subpath_is_moved(
|
self.check_if_path_or_subpath_is_moved(
|
||||||
@ -1951,7 +1951,7 @@ fn check_parent_of_field<'cx, 'tcx>(
|
|||||||
// no move out from an earlier location) then this is an attempt at initialization
|
// no move out from an earlier location) then this is an attempt at initialization
|
||||||
// of the union - we should error in that case.
|
// of the union - we should error in that case.
|
||||||
let tcx = this.infcx.tcx;
|
let tcx = this.infcx.tcx;
|
||||||
if let ty::Adt(def, _) = PlaceRef::ty(&base, this.body(), tcx).ty.kind() {
|
if let ty::Adt(def, _) = base.ty(this.body(), tcx).ty.kind() {
|
||||||
if def.is_union() {
|
if def.is_union() {
|
||||||
if this.move_data.path_map[mpi].iter().any(|moi| {
|
if this.move_data.path_map[mpi].iter().any(|moi| {
|
||||||
this.move_data.moves[*moi].source.is_predecessor_of(location, this.body)
|
this.move_data.moves[*moi].source.is_predecessor_of(location, this.body)
|
||||||
@ -2173,7 +2173,7 @@ fn is_mutable(
|
|||||||
Some((place_base, elem)) => {
|
Some((place_base, elem)) => {
|
||||||
match elem {
|
match elem {
|
||||||
ProjectionElem::Deref => {
|
ProjectionElem::Deref => {
|
||||||
let base_ty = PlaceRef::ty(&place_base, self.body(), self.infcx.tcx).ty;
|
let base_ty = place_base.ty(self.body(), self.infcx.tcx).ty;
|
||||||
|
|
||||||
// Check the kind of deref to decide
|
// Check the kind of deref to decide
|
||||||
match base_ty.kind() {
|
match base_ty.kind() {
|
||||||
|
@ -117,7 +117,7 @@ fn next(&mut self) -> Option<Self::Item> {
|
|||||||
// derefs, except we stop at the deref of a shared
|
// derefs, except we stop at the deref of a shared
|
||||||
// reference.
|
// reference.
|
||||||
|
|
||||||
let ty = PlaceRef::ty(&cursor_base, self.body, self.tcx).ty;
|
let ty = cursor_base.ty(self.body, self.tcx).ty;
|
||||||
match ty.kind() {
|
match ty.kind() {
|
||||||
ty::RawPtr(_) | ty::Ref(_ /*rgn*/, _ /*ty*/, hir::Mutability::Not) => {
|
ty::RawPtr(_) | ty::Ref(_ /*rgn*/, _ /*ty*/, hir::Mutability::Not) => {
|
||||||
// don't continue traversing over derefs of raw pointers or shared
|
// don't continue traversing over derefs of raw pointers or shared
|
||||||
|
Loading…
Reference in New Issue
Block a user