Skip to content

Commit 8f678ae

Browse files
committed
auto merge of rust-lang#8928 : novalis/rust/fix-8898, r=thestinger
I think this fixes 8898. I'm a bit unsure about how slices and owned pointers to vectors-of-unit already worked, but since they were already working, I didn't mess with them.
2 parents 73a28e5 + c4bb883 commit 8f678ae

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

src/libstd/repr.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -381,10 +381,11 @@ impl<'self> TyVisitor for ReprVisitor<'self> {
381381
}
382382
}
383383

384-
fn visit_evec_fixed(&mut self, _n: uint, sz: uint, _align: uint,
384+
fn visit_evec_fixed(&mut self, n: uint, sz: uint, _align: uint,
385385
mtbl: uint, inner: *TyDesc) -> bool {
386+
let assumed_size = if sz == 0 { n } else { sz };
386387
do self.get::<()> |this, b| {
387-
this.write_vec_range(mtbl, ptr::to_unsafe_ptr(b), sz, inner);
388+
this.write_vec_range(mtbl, ptr::to_unsafe_ptr(b), assumed_size, inner);
388389
}
389390
}
390391

src/test/run-pass/issue-8898.rs

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
12+
fn assert_repr_eq<T>(obj : T, expected : ~str) {
13+
14+
assert_eq!(expected, fmt!("%?", obj));
15+
}
16+
17+
pub fn main() {
18+
let abc = [1, 2, 3];
19+
let tf = [true, false];
20+
let x = [(), ()];
21+
let y = ~[(), ()];
22+
let slice = x.slice(0,1);
23+
let z = @x;
24+
25+
assert_repr_eq(abc, ~"[1, 2, 3]");
26+
assert_repr_eq(tf, ~"[true, false]");
27+
assert_repr_eq(x, ~"[(), ()]");
28+
assert_repr_eq(y, ~"~[(), ()]");
29+
assert_repr_eq(slice, ~"&[()]");
30+
assert_repr_eq(&x, ~"&[(), ()]");
31+
assert_repr_eq(z, ~"@[(), ()]");
32+
}

0 commit comments

Comments
 (0)