about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEduard Burtescu <edy.burt@gmail.com>2016-03-08 14:16:26 +0200
committerEduard Burtescu <edy.burt@gmail.com>2016-03-17 21:51:53 +0200
commitccc5e0732a95861de755cf14bec05d873bfa7481 (patch)
tree6531b187aae7c6a92f4da1d03aa85b7d0b604fc9 /src
parent1de6a9682f16a893cd5651db28e26a1cd92fd459 (diff)
downloadrust-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.rs9
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));