diff options
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/run-pass/tag-align-dyn-u64.rs | 24 | ||||
| -rw-r--r-- | src/test/run-pass/tag-align-dyn-variants.rs | 61 | ||||
| -rw-r--r-- | src/test/run-pass/tag-align-shape.rs | 19 | ||||
| -rw-r--r-- | src/test/run-pass/tag-align-u64.rs | 24 |
4 files changed, 128 insertions, 0 deletions
diff --git a/src/test/run-pass/tag-align-dyn-u64.rs b/src/test/run-pass/tag-align-dyn-u64.rs new file mode 100644 index 00000000000..18f612b19ad --- /dev/null +++ b/src/test/run-pass/tag-align-dyn-u64.rs @@ -0,0 +1,24 @@ +// xfail-test + +tag a_tag<A> { + a_tag(A); +} + +type t_rec = { + c8: u8, + t: a_tag<u64> +}; + +fn mk_rec() -> t_rec { + ret { c8:0u8, t:a_tag(0u64) }; +} + +fn is_8_byte_aligned(&&u: a_tag<u64>) -> bool { + let p = ptr::addr_of(u) as uint; + ret (p & 7u) == 0u; +} + +fn main() { + let x = mk_rec(); + assert is_8_byte_aligned(x.t); +} diff --git a/src/test/run-pass/tag-align-dyn-variants.rs b/src/test/run-pass/tag-align-dyn-variants.rs new file mode 100644 index 00000000000..10ea8f80b65 --- /dev/null +++ b/src/test/run-pass/tag-align-dyn-variants.rs @@ -0,0 +1,61 @@ +// xfail-test + +tag a_tag<A,B> { + varA(A); + varB(B); +} + +type t_rec<A,B> = { + chA: u8, + tA: a_tag<A,B>, + chB: u8, + tB: a_tag<A,B> +}; + +fn mk_rec<A:copy,B:copy>(a: A, b: B) -> t_rec<A,B> { + ret { chA:0u8, tA:varA(a), chB:1u8, tB:varB(b) }; +} + +fn is_aligned<A>(amnt: uint, &&u: A) -> bool { + let p = ptr::addr_of(u) as uint; + ret (p & (amnt-1u)) == 0u; +} + +fn variant_data_is_aligned<A,B>(amnt: uint, &&u: a_tag<A,B>) -> bool { + alt u { + varA(a) { is_aligned(amnt, a) } + varB(b) { is_aligned(amnt, b) } + } +} + +fn main() { + let x = mk_rec(22u64, 23u64); + assert is_aligned(8u, x.tA); + assert variant_data_is_aligned(8u, x.tA); + assert is_aligned(8u, x.tB); + assert variant_data_is_aligned(8u, x.tB); + + let x = mk_rec(22u64, 23u32); + assert is_aligned(8u, x.tA); + assert variant_data_is_aligned(8u, x.tA); + assert is_aligned(8u, x.tB); + assert variant_data_is_aligned(4u, x.tB); + + let x = mk_rec(22u32, 23u64); + assert is_aligned(8u, x.tA); + assert variant_data_is_aligned(4u, x.tA); + assert is_aligned(8u, x.tB); + assert variant_data_is_aligned(8u, x.tB); + + let x = mk_rec(22u32, 23u32); + assert is_aligned(4u, x.tA); + assert variant_data_is_aligned(4u, x.tA); + assert is_aligned(4u, x.tB); + assert variant_data_is_aligned(4u, x.tB); + + let x = mk_rec(22f64, 23f64); + assert is_aligned(8u, x.tA); + assert variant_data_is_aligned(8u, x.tA); + assert is_aligned(8u, x.tB); + assert variant_data_is_aligned(8u, x.tB); +} diff --git a/src/test/run-pass/tag-align-shape.rs b/src/test/run-pass/tag-align-shape.rs new file mode 100644 index 00000000000..18084aecab2 --- /dev/null +++ b/src/test/run-pass/tag-align-shape.rs @@ -0,0 +1,19 @@ +// xfail-test +// +// See issue #1535 + +tag a_tag { + a_tag(u64); +} + +type t_rec = { + c8: u8, + t: a_tag +}; + +fn main() { + let x = {c8: 22u8, t: a_tag(44u64)}; + let y = #fmt["%?", x]; + #debug["y = %s", y]; + assert y == "(22, a_tag(44))"; +} diff --git a/src/test/run-pass/tag-align-u64.rs b/src/test/run-pass/tag-align-u64.rs new file mode 100644 index 00000000000..f0df400cf19 --- /dev/null +++ b/src/test/run-pass/tag-align-u64.rs @@ -0,0 +1,24 @@ +// xfail-test + +tag a_tag { + a_tag(u64); +} + +type t_rec = { + c8: u8, + t: a_tag +}; + +fn mk_rec() -> t_rec { + ret { c8:0u8, t:a_tag(0u64) }; +} + +fn is_8_byte_aligned(&&u: a_tag) -> bool { + let p = ptr::addr_of(u) as u64; + ret (p & 7u64) == 0u64; +} + +fn main() { + let x = mk_rec(); + assert is_8_byte_aligned(x.t); +} |
