diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs index a4a2c9cfcd4e..016ef5584fa3 100644 --- a/src/rustc/middle/trans/base.rs +++ b/src/rustc/middle/trans/base.rs @@ -1849,6 +1849,10 @@ fn autoderef(cx: block, v: ValueRef, t: ty::t) -> result_t { t1 = derefed.t; v1 = derefed.v; } + ty::ty_rptr(_, mt) { + t1 = mt.ty; + v1 = v; + } ty::ty_res(did, inner, tps) { t1 = ty::substitute_type_params(ccx.tcx, tps, inner); v1 = GEPi(cx, v1, [0, 1]); diff --git a/src/rustc/middle/ty.rs b/src/rustc/middle/ty.rs index e2272c429ce2..51abd59b5f60 100644 --- a/src/rustc/middle/ty.rs +++ b/src/rustc/middle/ty.rs @@ -1119,7 +1119,7 @@ fn type_autoderef(cx: ctxt, t: t) -> t { let t1 = t; loop { alt get(t1).struct { - ty_box(mt) | ty_uniq(mt) { t1 = mt.ty; } + ty_box(mt) | ty_uniq(mt) | ty::ty_rptr(_, mt) { t1 = mt.ty; } ty_res(_, inner, tps) { t1 = substitute_type_params(cx, tps, inner); } diff --git a/src/rustc/middle/typeck.rs b/src/rustc/middle/typeck.rs index 457fb644d461..70fa2c51f88a 100644 --- a/src/rustc/middle/typeck.rs +++ b/src/rustc/middle/typeck.rs @@ -1058,7 +1058,7 @@ fn do_autoderef(fcx: @fn_ctxt, sp: span, t: ty::t) -> ty::t { let t1 = t; loop { alt structure_of(fcx, sp, t1) { - ty::ty_box(inner) | ty::ty_uniq(inner) { + ty::ty_box(inner) | ty::ty_uniq(inner) | ty::ty_rptr(_, inner) { alt ty::get(t1).struct { ty::ty_var(v1) { ty::occurs_check(fcx.ccx.tcx, sp, v1,