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:🆕:<[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.
This commit is contained in:
Simon Sapin 2018-07-08 16:07:08 +02:00
parent c6807bb1b2
commit 620599e886

View File

@ -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