From 620599e8860b92db1ebbcef3f50671b937aec9cd Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Sun, 8 Jul 2018 16:07:08 +0200 Subject: [PATCH] Remove `extern` on the `pub fn rust_oom` lang item in libstd, to match ABI of the declaration in liballoc This turned out to be important on Windows. Calling `handle_alloc_error(Layout::new::<[u8; 42]>())` caused: ``` Exception thrown at 0x00007FF7C70DC399 in a.exe: 0xC0000005: Access violation reading location 0x000000000000002A. ``` 0x2A equals 42, so it looks like the `Layout::size` field of type `usize` was interpreted as a pointer to read from. --- src/libstd/alloc.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libstd/alloc.rs b/src/libstd/alloc.rs index f6cecbea11f8..cfdfbe1357d5 100644 --- a/src/libstd/alloc.rs +++ b/src/libstd/alloc.rs @@ -127,7 +127,7 @@ fn default_alloc_error_hook(layout: Layout) { #[doc(hidden)] #[lang = "oom"] #[unstable(feature = "alloc_internals", issue = "0")] -pub extern fn rust_oom(layout: Layout) -> ! { +pub fn rust_oom(layout: Layout) -> ! { let hook = HOOK.load(Ordering::SeqCst); let hook: fn(Layout) = if hook.is_null() { default_alloc_error_hook