| //! Regression test for https://github.com/rust-lang/rust/issues/13259 |
| |
| //@ run-pass |
| |
| #[cfg(windows)] |
| mod imp { |
| type LPVOID = *mut u8; |
| type DWORD = u32; |
| type LPWSTR = *mut u16; |
| |
| extern "system" { |
| fn FormatMessageW( |
| flags: DWORD, |
| lpSrc: LPVOID, |
| msgId: DWORD, |
| langId: DWORD, |
| buf: LPWSTR, |
| nsize: DWORD, |
| args: *const u8, |
| ) -> DWORD; |
| } |
| |
| pub fn test() { |
| let mut buf: [u16; 50] = [0; 50]; |
| let ret = unsafe { |
| FormatMessageW( |
| 0x1000, |
| core::ptr::null_mut(), |
| 1, |
| 0x400, |
| buf.as_mut_ptr(), |
| buf.len() as u32, |
| core::ptr::null(), |
| ) |
| }; |
| // On some 32-bit Windowses (Win7-8 at least) this will panic with segmented |
| // stacks taking control of pvArbitrary |
| assert!(ret != 0); |
| } |
| } |
| |
| #[cfg(not(windows))] |
| mod imp { |
| pub fn test() {} |
| } |
| |
| fn main() { |
| imp::test() |
| } |