about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-12-28 14:32:09 +0000
committerbors <bors@rust-lang.org>2015-12-28 14:32:09 +0000
commit27a1834ce522e3ec7fe4726b1661de16ee30c503 (patch)
tree360b282b9ba1ba294e52eed567b0b3e123d5f030
parent89753077fc25abb9d04d24a2b2b73984854f7c3a (diff)
parente7cab13037015082d5fe7deba59d8aec5dd894a2 (diff)
downloadrust-27a1834ce522e3ec7fe4726b1661de16ee30c503.tar.gz
rust-27a1834ce522e3ec7fe4726b1661de16ee30c503.zip
Auto merge of #30588 - nagisa:mir-unit-enums-again, r=eddyb
A dumb mistake on my part from previous PR fixing unit enums in MIR.
-rw-r--r--src/librustc_trans/trans/mir/rvalue.rs3
-rw-r--r--src/test/run-pass/mir_refs_correct.rs12
2 files changed, 14 insertions, 1 deletions
diff --git a/src/librustc_trans/trans/mir/rvalue.rs b/src/librustc_trans/trans/mir/rvalue.rs
index a08ec123895..5fbcb687f09 100644
--- a/src/librustc_trans/trans/mir/rvalue.rs
+++ b/src/librustc_trans/trans/mir/rvalue.rs
@@ -102,7 +102,8 @@ impl<'bcx, 'tcx> MirContext<'bcx, 'tcx> {
                     mir::AggregateKind::Adt(adt_def, index, _)
                     if adt_def.variants[index].kind() == ty::VariantKind::Unit => {
                         let repr = adt::represent_type(bcx.ccx(), dest.ty.to_ty(bcx.tcx()));
-                        adt::trans_set_discr(bcx, &*repr, dest.llval, 0);
+                        let disr = adt_def.variants[index].disr_val;
+                        adt::trans_set_discr(bcx, &*repr, dest.llval, disr);
                     },
                     _ => {
                         for (i, operand) in operands.iter().enumerate() {
diff --git a/src/test/run-pass/mir_refs_correct.rs b/src/test/run-pass/mir_refs_correct.rs
index 2c0cd5d6c8a..b46ec0d8764 100644
--- a/src/test/run-pass/mir_refs_correct.rs
+++ b/src/test/run-pass/mir_refs_correct.rs
@@ -59,6 +59,12 @@ enum E {
     U(u8)
 }
 
+#[derive(PartialEq, Debug, Eq)]
+enum CEnum {
+    A = 0x321,
+    B = 0x123
+}
+
 const C: u8 = 84;
 const C2: [u8; 5] = [42; 5];
 const C3: [u8; 3] = [42, 41, 40];
@@ -187,6 +193,11 @@ fn t22() -> Option<u8> {
     None
 }
 
+#[rustc_mir]
+fn t23() -> (CEnum, CEnum) {
+    (CEnum::A, CEnum::B)
+}
+
 fn main(){
     unsafe {
         assert_eq!(t1()(), regular());
@@ -228,5 +239,6 @@ fn main(){
         assert_eq!(t20()(123u64, 38u32), <u32 as T<_, _>>::staticmeth(123, 38));
         assert_eq!(t21(), Unit);
         assert_eq!(t22(), None);
+        assert_eq!(t23(), (CEnum::A, CEnum::B));
     }
 }