diff options
| author | Felix S. Klock II <pnkfelix@pnkfx.org> | 2015-02-12 00:29:50 +0100 |
|---|---|---|
| committer | Felix S. Klock II <pnkfelix@pnkfx.org> | 2015-02-12 00:29:50 +0100 |
| commit | f27b3e251cc44464564cc02f7fd5b6d3176204cc (patch) | |
| tree | 202e835c56daad8018a181927fd953e066e1458d | |
| parent | 1500df8934431dd7842827209528211ae53ded12 (diff) | |
| download | rust-f27b3e251cc44464564cc02f7fd5b6d3176204cc.tar.gz rust-f27b3e251cc44464564cc02f7fd5b6d3176204cc.zip | |
PR #22012 followup: clean up vtable::check_object_cast by reusing `fresh_ty`
(hat tip to nikomatsakis who was the one who pointed out this simplification to the logic.)
| -rw-r--r-- | src/librustc_typeck/check/vtable.rs | 13 |
1 files changed, 2 insertions, 11 deletions
diff --git a/src/librustc_typeck/check/vtable.rs b/src/librustc_typeck/check/vtable.rs index 00f6c6109fa..2e7eff68bd5 100644 --- a/src/librustc_typeck/check/vtable.rs +++ b/src/librustc_typeck/check/vtable.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use check::{FnCtxt, structurally_resolved_type}; +use check::{FnCtxt}; use check::demand; use middle::traits::{self, ObjectSafetyViolation, MethodViolationCode}; use middle::traits::{Obligation, ObligationCause}; @@ -66,20 +66,11 @@ pub fn check_object_cast<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>, demand::suptype(fcx, source_expr.span, source_expected_ty, source_ty); debug!("check_object_cast postunify source_ty={}", source_ty.repr(tcx)); - let source_ty = structurally_resolved_type(fcx, source_expr.span, source_ty); - debug!("check_object_cast resolveto source_ty={}", source_ty.repr(tcx)); let object_trait = object_trait(&object_trait_ty); - let referent_ty = match source_ty.sty { - ty::ty_uniq(ty) => ty, - ty::ty_rptr(_, ty::mt { ty, mutbl: _ }) => ty, - _ => fcx.tcx().sess.span_bug(source_expr.span, - "expected appropriate reference type"), - }; - // Ensure that if Ptr<T> is cast to Ptr<Trait>, then T : Trait. - push_cast_obligation(fcx, cast_expr, object_trait, referent_ty); + push_cast_obligation(fcx, cast_expr, object_trait, fresh_ty); check_object_safety(tcx, object_trait, source_expr.span); fn object_trait<'a, 'tcx>(t: &'a Ty<'tcx>) -> &'a ty::TyTrait<'tcx> { |
