auto merge of #8078 : luqmana/rust/gst, r=Aatch

Fixes #5917 by not trying to treat `&[T]` as a slice since it already is one.
This commit is contained in:
bors 2013-07-27 13:01:32 -07:00
commit 32622cef99
2 changed files with 29 additions and 3 deletions

View File

@ -211,11 +211,16 @@ pub fn const_expr(cx: @mut CrateContext, e: @ast::expr) -> ValueRef {
}
ty::AutoBorrowVec(ty::re_static, m) => {
assert!(m != ast::m_mutbl);
let size = machine::llsize_of(cx,
val_ty(llconst));
assert_eq!(abi::slice_elt_base, 0);
assert_eq!(abi::slice_elt_len, 1);
llconst = C_struct([llptr, size]);
match ty::get(ty).sty {
ty::ty_evec(_, ty::vstore_fixed(*)) => {
let size = machine::llsize_of(cx, val_ty(llconst));
llconst = C_struct([llptr, size]);
}
_ => {}
}
}
_ => {
cx.sess.span_bug(e.span,

View File

@ -0,0 +1,21 @@
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
struct T(&'static [int]);
static A: T = T(&'static [5, 4, 3]);
static B: T = T(&[5, 4, 3]);
static C: T = T([5, 4, 3]);
pub fn main() {
assert_eq!(A[0], 5);
assert_eq!(B[1], 4);
assert_eq!(C[2], 3);
}