From ccc5e0732a95861de755cf14bec05d873bfa7481 Mon Sep 17 00:00:00 2001 From: Eduard Burtescu Date: Tue, 8 Mar 2016 14:16:26 +0200 Subject: [PATCH] mir: Ignore noop casts (e.g. when `as` used for coercion). --- src/librustc_mir/build/expr/as_rvalue.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/librustc_mir/build/expr/as_rvalue.rs b/src/librustc_mir/build/expr/as_rvalue.rs index 2338d7df01a8..db94035e5ce5 100644 --- a/src/librustc_mir/build/expr/as_rvalue.rs +++ b/src/librustc_mir/build/expr/as_rvalue.rs @@ -73,8 +73,13 @@ impl<'a,'tcx> Builder<'a,'tcx> { }) } ExprKind::Cast { source } => { - let source = unpack!(block = this.as_operand(block, source)); - block.and(Rvalue::Cast(CastKind::Misc, source, expr.ty)) + let source = this.hir.mirror(source); + if source.ty == expr.ty { + this.expr_as_rvalue(block, source) + } else { + let source = unpack!(block = this.as_operand(block, source)); + block.and(Rvalue::Cast(CastKind::Misc, source, expr.ty)) + } } ExprKind::ReifyFnPointer { source } => { let source = unpack!(block = this.as_operand(block, source));