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 => {
|
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())
|
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) => {
|
ty::AutoDerefRef(ref adj) => {
|
||||||
let mut ty = ety;
|
let mut ty = ety;
|
||||||
// Save the last autoderef in case we can avoid it.
|
// Save the last autoderef in case we can avoid it.
|
||||||
for _ in range(0, adj.autoderefs-1) {
|
if adj.autoderefs > 0 {
|
||||||
let (dv, dt) = const_deref(cx, llconst, ty, false);
|
for _ in range(0, adj.autoderefs-1) {
|
||||||
llconst = dv;
|
let (dv, dt) = const_deref(cx, llconst, ty, false);
|
||||||
ty = dt;
|
llconst = dv;
|
||||||
|
ty = dt;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
match adj.autoref {
|
match adj.autoref {
|
||||||
@ -263,6 +265,8 @@ pub fn const_expr(cx: &CrateContext, e: &ast::Expr, is_local: bool) -> (ValueRef
|
|||||||
// work properly.
|
// work properly.
|
||||||
let (_, dt) = const_deref(cx, llconst, ty, false);
|
let (_, dt) = const_deref(cx, llconst, ty, false);
|
||||||
ty = dt;
|
ty = dt;
|
||||||
|
} else {
|
||||||
|
llconst = const_addr_of(cx, llconst, ast::MutImmutable)
|
||||||
}
|
}
|
||||||
|
|
||||||
match ty::get(ty).sty {
|
match ty::get(ty).sty {
|
||||||
|
@ -12,11 +12,21 @@
|
|||||||
|
|
||||||
static x : [int, ..4] = [1,2,3,4];
|
static x : [int, ..4] = [1,2,3,4];
|
||||||
static y : &'static [int] = &[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() {
|
pub fn main() {
|
||||||
println!("{:?}", x[1]);
|
println!("{:?}", x[1]);
|
||||||
println!("{:?}", y[1]);
|
println!("{:?}", y[1]);
|
||||||
|
println!("{:?}", z[1]);
|
||||||
|
println!("{:?}", zz[1]);
|
||||||
assert_eq!(x[1], 2);
|
assert_eq!(x[1], 2);
|
||||||
assert_eq!(x[3], 4);
|
assert_eq!(x[3], 4);
|
||||||
assert_eq!(x[3], y[3]);
|
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