diff options
| author | bors <bors@rust-lang.org> | 2013-07-10 17:13:50 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-07-10 17:13:50 -0700 |
| commit | 9b5d52312622fb301d9e102b3eeca5a7afcdeb9b (patch) | |
| tree | 7d9825b71eef6c757a3dab37245a42efda89ed82 /src/libstd | |
| parent | e7040e8a249a8cd53931603b89e0d12b0b854398 (diff) | |
| parent | 6d4d2c9a33ea0b92e98c22e84e76d3116dcd7444 (diff) | |
| download | rust-9b5d52312622fb301d9e102b3eeca5a7afcdeb9b.tar.gz rust-9b5d52312622fb301d9e102b3eeca5a7afcdeb9b.zip | |
auto merge of #7683 : alexcrichton/rust/issue-7625, r=thestinger
Closes #7625
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/repr.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/libstd/repr.rs b/src/libstd/repr.rs index dd5075f8e66..79d11ddca61 100644 --- a/src/libstd/repr.rs +++ b/src/libstd/repr.rs @@ -206,11 +206,13 @@ impl ReprVisitor { inner: *TyDesc) -> bool { let mut p = ptr; - let end = ptr::offset(p, len); let (sz, al) = unsafe { ((*inner).size, (*inner).align) }; self.writer.write_char('['); let mut first = true; - while (p as uint) < (end as uint) { + let mut left = len; + // unit structs have 0 size, and don't loop forever. + let dec = if sz == 0 {1} else {sz}; + while left > 0 { if first { first = false; } else { @@ -219,6 +221,7 @@ impl ReprVisitor { self.write_mut_qualifier(mtbl); self.visit_ptr_inner(p as *c_void, inner); p = align(ptr::offset(p, sz) as uint, al) as *u8; + left -= dec; } self.writer.write_char(']'); true @@ -635,4 +638,7 @@ fn test_repr() { "(10, ~\"hello\")"); exact_test(&(10_u64, ~"hello"), "(10, ~\"hello\")"); + + struct Foo; + exact_test(&(~[Foo, Foo, Foo]), "~[{}, {}, {}]"); } |
