diff options
| author | Eduard Burtescu <edy.burt@gmail.com> | 2016-03-08 14:16:26 +0200 |
|---|---|---|
| committer | Eduard Burtescu <edy.burt@gmail.com> | 2016-03-17 21:51:53 +0200 |
| commit | ccc5e0732a95861de755cf14bec05d873bfa7481 (patch) | |
| tree | 6531b187aae7c6a92f4da1d03aa85b7d0b604fc9 /src | |
| parent | 1de6a9682f16a893cd5651db28e26a1cd92fd459 (diff) | |
| download | rust-ccc5e0732a95861de755cf14bec05d873bfa7481.tar.gz rust-ccc5e0732a95861de755cf14bec05d873bfa7481.zip | |
mir: Ignore noop casts (e.g. when `as` used for coercion).
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_mir/build/expr/as_rvalue.rs | 9 |
1 files 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 2338d7df01a..db94035e5ce 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)); |
