| //@ run-pass |
| //@ pretty-expanded FIXME #23616 |
| #![allow(non_upper_case_globals)] |
| |
| /*! |
| * Try to double-check that static fns have the right size (with or |
| * without dummy env ptr, as appropriate) by iterating a size-2 array. |
| * If the static size differs from the runtime size, the second element |
| * should be read as a null or otherwise wrong pointer and crash. |
| */ |
| |
| fn f() { } |
| static bare_fns: &'static [fn()] = &[f, f]; |
| struct S<F: FnOnce()>(F); |
| static mut closures: &'static mut [S<fn()>] = &mut [S(f as fn()), S(f as fn())]; |
| |
| pub fn main() { |
| unsafe { |
| for &bare_fn in bare_fns { bare_fn() } |
| for closure in &mut *closures { |
| let S(ref mut closure) = *closure; |
| (*closure)() |
| } |
| } |
| } |