]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass/nullable-pointer-size.rs
02fc0cf0291d43ba23e1eee7986f7efa39460e93
[rust.git] / src / test / run-pass / nullable-pointer-size.rs
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 use std::mem;
12
13 enum E<T> { Thing(int, T), Nothing((), ((), ()), [i8; 0]) }
14 struct S<T>(int, T);
15
16 // These are macros so we get useful assert messages.
17
18 macro_rules! check_option {
19     ($T:ty) => {
20         assert_eq!(mem::size_of::<Option<$T>>(), mem::size_of::<$T>());
21     }
22 }
23
24 macro_rules! check_fancy {
25     ($T:ty) => {
26         assert_eq!(mem::size_of::<E<$T>>(), mem::size_of::<S<$T>>());
27     }
28 }
29
30 macro_rules! check_type {
31     ($T:ty) => {{
32         check_option!($T);
33         check_fancy!($T);
34     }}
35 }
36
37 pub fn main() {
38     check_type!(&'static int);
39     check_type!(Box<int>);
40     check_type!(extern fn());
41 }