auto merge of #16934 : nick29581/rust/dst-bug-6, r=pcwalton
Closes #16911 r?
This commit is contained in:
commit
b7d456dfea
@ -170,7 +170,7 @@ fn const_deref(cx: &CrateContext, v: ValueRef, t: ty::t, explicit: bool)
|
||||
}
|
||||
}
|
||||
None => {
|
||||
cx.sess().bug(format!("can't dereference const of type {}",
|
||||
cx.sess().bug(format!("cannot dereference const of type {}",
|
||||
ty_to_string(cx.tcx(), t)).as_slice())
|
||||
}
|
||||
}
|
||||
@ -225,10 +225,12 @@ pub fn const_expr(cx: &CrateContext, e: &ast::Expr, is_local: bool) -> (ValueRef
|
||||
ty::AutoDerefRef(ref adj) => {
|
||||
let mut ty = ety;
|
||||
// Save the last autoderef in case we can avoid it.
|
||||
for _ in range(0, adj.autoderefs-1) {
|
||||
let (dv, dt) = const_deref(cx, llconst, ty, false);
|
||||
llconst = dv;
|
||||
ty = dt;
|
||||
if adj.autoderefs > 0 {
|
||||
for _ in range(0, adj.autoderefs-1) {
|
||||
let (dv, dt) = const_deref(cx, llconst, ty, false);
|
||||
llconst = dv;
|
||||
ty = dt;
|
||||
}
|
||||
}
|
||||
|
||||
match adj.autoref {
|
||||
@ -263,6 +265,8 @@ pub fn const_expr(cx: &CrateContext, e: &ast::Expr, is_local: bool) -> (ValueRef
|
||||
// work properly.
|
||||
let (_, dt) = const_deref(cx, llconst, ty, false);
|
||||
ty = dt;
|
||||
} else {
|
||||
llconst = const_addr_of(cx, llconst, ast::MutImmutable)
|
||||
}
|
||||
|
||||
match ty::get(ty).sty {
|
||||
|
@ -12,11 +12,21 @@
|
||||
|
||||
static x : [int, ..4] = [1,2,3,4];
|
||||
static y : &'static [int] = &[1,2,3,4];
|
||||
static z : &'static [int, ..4] = &[1,2,3,4];
|
||||
static zz : &'static [int] = [1,2,3,4];
|
||||
|
||||
pub fn main() {
|
||||
println!("{:?}", x[1]);
|
||||
println!("{:?}", y[1]);
|
||||
println!("{:?}", z[1]);
|
||||
println!("{:?}", zz[1]);
|
||||
assert_eq!(x[1], 2);
|
||||
assert_eq!(x[3], 4);
|
||||
assert_eq!(x[3], y[3]);
|
||||
assert_eq!(z[1], 2);
|
||||
assert_eq!(z[3], 4);
|
||||
assert_eq!(z[3], y[3]);
|
||||
assert_eq!(zz[1], 2);
|
||||
assert_eq!(zz[3], 4);
|
||||
assert_eq!(zz[3], y[3]);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user