parent
2b67d88809
commit
e6cadc4c03
2 changed files with 8 additions and 45 deletions
|
@ -739,8 +739,9 @@ impl LookupContext {
|
||||||
|
|
||||||
let tcx = self.tcx();
|
let tcx = self.tcx();
|
||||||
return match ty::get(self_ty).sty {
|
return match ty::get(self_ty).sty {
|
||||||
ty::ty_rptr(self_r, self_mt) if self_mt.mutbl == m_mutbl => {
|
ty::ty_rptr(_, self_mt) if self_mt.mutbl == m_mutbl => {
|
||||||
let region = fresh_region(self, self_r);
|
let region = self.infcx().next_region_var(self.expr.span,
|
||||||
|
self.expr.id);
|
||||||
(ty::mk_rptr(tcx, region, self_mt),
|
(ty::mk_rptr(tcx, region, self_mt),
|
||||||
ty::AutoAdjustment {
|
ty::AutoAdjustment {
|
||||||
autoderefs: autoderefs+1,
|
autoderefs: autoderefs+1,
|
||||||
|
@ -748,9 +749,10 @@ impl LookupContext {
|
||||||
region: region,
|
region: region,
|
||||||
mutbl: self_mt.mutbl})})
|
mutbl: self_mt.mutbl})})
|
||||||
}
|
}
|
||||||
ty::ty_evec(self_mt, vstore_slice(self_r))
|
ty::ty_evec(self_mt, vstore_slice(_))
|
||||||
if self_mt.mutbl == m_mutbl => {
|
if self_mt.mutbl == m_mutbl => {
|
||||||
let region = fresh_region(self, self_r);
|
let region = self.infcx().next_region_var(self.expr.span,
|
||||||
|
self.expr.id);
|
||||||
(ty::mk_evec(tcx, self_mt, vstore_slice(region)),
|
(ty::mk_evec(tcx, self_mt, vstore_slice(region)),
|
||||||
ty::AutoAdjustment {
|
ty::AutoAdjustment {
|
||||||
autoderefs: autoderefs,
|
autoderefs: autoderefs,
|
||||||
|
@ -763,26 +765,6 @@ impl LookupContext {
|
||||||
autoref: None})
|
autoref: None})
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
fn fresh_region(self: &LookupContext,
|
|
||||||
self_r: ty::Region) -> ty::Region {
|
|
||||||
let region = self.infcx().next_region_var(self.expr.span,
|
|
||||||
self.expr.id);
|
|
||||||
|
|
||||||
// FIXME(#3148)---in principle this dependency should
|
|
||||||
// be done more generally as part of regionck
|
|
||||||
match infer::mk_subr(self.infcx(), true, self.expr.span,
|
|
||||||
region, self_r) {
|
|
||||||
Ok(_) => {}
|
|
||||||
Err(e) => {
|
|
||||||
self.tcx().sess.span_bug(
|
|
||||||
self.expr.span,
|
|
||||||
fmt!("Failed with error: %?", e));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return region;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn search_for_autosliced_method(
|
fn search_for_autosliced_method(
|
||||||
|
|
|
@ -196,15 +196,7 @@ impl Coerce {
|
||||||
let inner_ty = match *sty_a {
|
let inner_ty = match *sty_a {
|
||||||
ty::ty_box(mt_a) => mt_a.ty,
|
ty::ty_box(mt_a) => mt_a.ty,
|
||||||
ty::ty_uniq(mt_a) => mt_a.ty,
|
ty::ty_uniq(mt_a) => mt_a.ty,
|
||||||
ty::ty_rptr(r_a, mt_a) => {
|
ty::ty_rptr(r_a, mt_a) => mt_a.ty,
|
||||||
// Ensure that the pointer we are borrowing from lives
|
|
||||||
// at least as long as the borrowed result.
|
|
||||||
//
|
|
||||||
// FIXME(#3148)---in principle this dependency should
|
|
||||||
// be done more generally
|
|
||||||
if_ok!(sub.contraregions(r_a, r_borrow));
|
|
||||||
mt_a.ty
|
|
||||||
}
|
|
||||||
_ => {
|
_ => {
|
||||||
return self.subtype(a, b);
|
return self.subtype(a, b);
|
||||||
}
|
}
|
||||||
|
@ -267,18 +259,7 @@ impl Coerce {
|
||||||
let sub = Sub(**self);
|
let sub = Sub(**self);
|
||||||
let r_borrow = self.infcx.next_region_var_nb(self.span);
|
let r_borrow = self.infcx.next_region_var_nb(self.span);
|
||||||
let ty_inner = match *sty_a {
|
let ty_inner = match *sty_a {
|
||||||
ty::ty_evec(mt, vstore_box) => mt.ty,
|
ty::ty_evec(mt, _) => mt.ty,
|
||||||
ty::ty_evec(mt, vstore_uniq) => mt.ty,
|
|
||||||
ty::ty_evec(mt, vstore_fixed(_)) => mt.ty,
|
|
||||||
ty::ty_evec(mt, vstore_slice(r_a)) => {
|
|
||||||
// Ensure that the pointer we are borrowing from lives
|
|
||||||
// at least as long as the borrowed result.
|
|
||||||
//
|
|
||||||
// FIXME(#3148)---in principle this dependency should
|
|
||||||
// be done more generally
|
|
||||||
if_ok!(sub.contraregions(r_a, r_borrow));
|
|
||||||
mt.ty
|
|
||||||
}
|
|
||||||
_ => {
|
_ => {
|
||||||
return self.subtype(a, b);
|
return self.subtype(a, b);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue