]> git.lizzy.rs Git - rust.git/commitdiff
[MIR] Handle FatPtr in mir::constant::trans_constval.
authorLuqman Aden <laden@csclub.uwaterloo.ca>
Sat, 19 Dec 2015 14:32:08 +0000 (09:32 -0500)
committerLuqman Aden <laden@csclub.uwaterloo.ca>
Sat, 19 Dec 2015 14:58:11 +0000 (09:58 -0500)
src/librustc_trans/trans/mir/constant.rs
src/test/run-pass/mir_fat_ptr.rs

index 38fab1dbf07f9016e02049c0a100af06f03e256a..70a56990efd0341989e67e91737796df813cee95 100644 (file)
@@ -8,6 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+use back::abi;
 use middle::ty::{Ty, HasTypeFlags};
 use rustc::middle::const_eval::ConstVal;
 use rustc::mir::repr as mir;
@@ -29,6 +30,10 @@ pub fn trans_constval(&mut self,
         let val = consts::trans_constval(bcx, cv, ty, bcx.fcx.param_substs);
         let val = if common::type_is_immediate(ccx, ty) {
             OperandValue::Immediate(val)
+        } else if common::type_is_fat_ptr(bcx.tcx(), ty) {
+            let data = common::const_get_elt(ccx, val, &[abi::FAT_PTR_ADDR as u32]);
+            let extra = common::const_get_elt(ccx, val, &[abi::FAT_PTR_EXTRA as u32]);
+            OperandValue::FatPtr(data, extra)
         } else {
             OperandValue::Ref(val)
         };
index 1916e608a8c79bdc2139f5ddbe95c09dc4d9e76d..9a4267bec925c88a500ddb7eb766ad8b61cc05a5 100644 (file)
@@ -49,6 +49,11 @@ fn fat_ptr_store_to<'a>(a: &'a [u8], b: &mut &'a [u8]) {
     *b = a;
 }
 
+#[rustc_mir]
+fn fat_ptr_constant() -> &'static str {
+    "HELLO"
+}
+
 fn main() {
     let a = Wrapper(4, [7,6,5]);
 
@@ -60,4 +65,6 @@ fn main() {
     let mut target : &[u8] = &[42];
     fat_ptr_store_to(p, &mut target);
     assert_eq!(target, &a.1);
+
+    assert_eq!(fat_ptr_constant(), "HELLO");
 }