From c4bb88364eaac3104271b42be15d64d704aee055 Mon Sep 17 00:00:00 2001 From: novalis Date: Sun, 1 Sep 2013 21:32:03 -0400 Subject: [PATCH] Fix #8898 --- src/libstd/repr.rs | 5 +++-- src/test/run-pass/issue-8898.rs | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/test/run-pass/issue-8898.rs diff --git a/src/libstd/repr.rs b/src/libstd/repr.rs index 3e2c5773acced..003dda294daf8 100644 --- a/src/libstd/repr.rs +++ b/src/libstd/repr.rs @@ -381,10 +381,11 @@ impl<'self> TyVisitor for ReprVisitor<'self> { } } - fn visit_evec_fixed(&mut self, _n: uint, sz: uint, _align: uint, + fn visit_evec_fixed(&mut self, n: uint, sz: uint, _align: uint, mtbl: uint, inner: *TyDesc) -> bool { + let assumed_size = if sz == 0 { n } else { sz }; do self.get::<()> |this, b| { - this.write_vec_range(mtbl, ptr::to_unsafe_ptr(b), sz, inner); + this.write_vec_range(mtbl, ptr::to_unsafe_ptr(b), assumed_size, inner); } } diff --git a/src/test/run-pass/issue-8898.rs b/src/test/run-pass/issue-8898.rs new file mode 100644 index 0000000000000..5a54821dc1ee5 --- /dev/null +++ b/src/test/run-pass/issue-8898.rs @@ -0,0 +1,32 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +fn assert_repr_eq(obj : T, expected : ~str) { + + assert_eq!(expected, fmt!("%?", obj)); +} + +pub fn main() { + let abc = [1, 2, 3]; + let tf = [true, false]; + let x = [(), ()]; + let y = ~[(), ()]; + let slice = x.slice(0,1); + let z = @x; + + assert_repr_eq(abc, ~"[1, 2, 3]"); + assert_repr_eq(tf, ~"[true, false]"); + assert_repr_eq(x, ~"[(), ()]"); + assert_repr_eq(y, ~"~[(), ()]"); + assert_repr_eq(slice, ~"&[()]"); + assert_repr_eq(&x, ~"&[(), ()]"); + assert_repr_eq(z, ~"@[(), ()]"); +}