about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEduard Burtescu <edy.burt@gmail.com>2016-06-07 00:24:21 +0300
committerEduard Burtescu <edy.burt@gmail.com>2016-06-07 00:24:21 +0300
commitb6d9f8387aaa9ccd9ba0b379b60c402561fad970 (patch)
treec5526aa513d40225949ab260e142e899914ff2c7
parent8cbffc5bcfbc4696173678d50d519e9e61676265 (diff)
downloadrust-b6d9f8387aaa9ccd9ba0b379b60c402561fad970.tar.gz
rust-b6d9f8387aaa9ccd9ba0b379b60c402561fad970.zip
trans: use Pair for ignored nil pairs instead of Immediate.
-rw-r--r--src/librustc_trans/mir/mod.rs7
-rw-r--r--src/test/run-pass/mir_trans_calls.rs12
2 files changed, 18 insertions, 1 deletions
diff --git a/src/librustc_trans/mir/mod.rs b/src/librustc_trans/mir/mod.rs
index d1206550b13..408b30c7258 100644
--- a/src/librustc_trans/mir/mod.rs
+++ b/src/librustc_trans/mir/mod.rs
@@ -124,7 +124,12 @@ impl<'tcx> TempRef<'tcx> {
             // Zero-size temporaries aren't always initialized, which
             // doesn't matter because they don't contain data, but
             // we need something in the operand.
-            let val = OperandValue::Immediate(common::C_nil(ccx));
+            let nil = common::C_nil(ccx);
+            let val = if common::type_is_imm_pair(ccx, ty) {
+                OperandValue::Pair(nil, nil)
+            } else {
+                OperandValue::Immediate(nil)
+            };
             let op = OperandRef {
                 val: val,
                 ty: ty
diff --git a/src/test/run-pass/mir_trans_calls.rs b/src/test/run-pass/mir_trans_calls.rs
index 31e2c892571..0527f38a9c3 100644
--- a/src/test/run-pass/mir_trans_calls.rs
+++ b/src/test/run-pass/mir_trans_calls.rs
@@ -147,6 +147,16 @@ fn test_fn_transmute_zst(x: ()) -> [(); 1] {
     })
 }
 
+#[rustc_mir]
+fn test_fn_ignored_pair() -> ((), ()) {
+    ((), ())
+}
+
+#[rustc_mir]
+fn test_fn_ignored_pair_0() {
+    test_fn_ignored_pair().0
+}
+
 fn main() {
     assert_eq!(test1(1, (2, 3), &[4, 5, 6]), (1, (2, 3), &[4, 5, 6][..]));
     assert_eq!(test2(98), 98);
@@ -169,4 +179,6 @@ fn main() {
 
     assert_eq!(test_fn_nil_call(&(|| 42)), 42);
     assert_eq!(test_fn_transmute_zst(()), [()]);
+
+    assert_eq!(test_fn_ignored_pair_0(), ());
 }