Skip to content

Commit

Permalink
[MIR] Handle FatPtr in mir::constant::trans_constval.
Browse files Browse the repository at this point in the history
  • Loading branch information
luqmana committed Dec 19, 2015
1 parent fec739b commit 0f860c2
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/librustc_trans/trans/mir/constant.rs
Expand Up @@ -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;
Expand All @@ -29,6 +30,10 @@ impl<'bcx, 'tcx> MirContext<'bcx, 'tcx> {
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)
};
Expand Down
7 changes: 7 additions & 0 deletions src/test/run-pass/mir_fat_ptr.rs
Expand Up @@ -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]);

Expand All @@ -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");
}

0 comments on commit 0f860c2

Please sign in to comment.