about summary refs log tree commit diff
path: root/compiler/rustc_passes/src
diff options
context:
space:
mode:
authorHarald Hoyer <harald@redhat.com>2020-09-07 10:45:20 +0200
committerHarald Hoyer <harald@redhat.com>2020-10-02 09:00:29 +0200
commitcadd12b5f020b9b2c7bb0c5e7078b81fbdcfb6d8 (patch)
treef08cb851bfe4d02d97b2b20748a9f0d69d225ed0 /compiler/rustc_passes/src
parentf283d3f02cf3ed261a519afe05cde9e23d1d9278 (diff)
downloadrust-cadd12b5f020b9b2c7bb0c5e7078b81fbdcfb6d8.tar.gz
rust-cadd12b5f020b9b2c7bb0c5e7078b81fbdcfb6d8.zip
Implement Make `handle_alloc_error` default to panic (for no_std + liballoc)
Related: https://github.com/rust-lang/rust/issues/66741

Guarded with `#![feature(default_alloc_error_handler)]` a default
`alloc_error_handler` is called, if a custom allocator is used and no
other custom `#[alloc_error_handler]` is defined.

The panic message does not contain the size anymore, because it would
pull in the fmt machinery, which would blow up the code size
significantly.
Diffstat (limited to 'compiler/rustc_passes/src')
-rw-r--r--compiler/rustc_passes/src/weak_lang_items.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/compiler/rustc_passes/src/weak_lang_items.rs b/compiler/rustc_passes/src/weak_lang_items.rs
index 6bc2110bfb3..effb25b0224 100644
--- a/compiler/rustc_passes/src/weak_lang_items.rs
+++ b/compiler/rustc_passes/src/weak_lang_items.rs
@@ -64,7 +64,10 @@ fn verify<'tcx>(tcx: TyCtxt<'tcx>, items: &lang_items::LanguageItems) {
             if item == LangItem::PanicImpl {
                 tcx.sess.err("`#[panic_handler]` function required, but not found");
             } else if item == LangItem::Oom {
-                tcx.sess.err("`#[alloc_error_handler]` function required, but not found");
+                if !tcx.features().default_alloc_error_handler {
+                    tcx.sess.err("`#[alloc_error_handler]` function required, but not found.");
+                    tcx.sess.note_without_error("Use `#![feature(default_alloc_error_handler)]` for a default error handler.");
+                }
             } else {
                 tcx.sess.err(&format!("language item required, but not found: `{}`", name));
             }