about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2018-08-26 04:02:19 +0000
committerbors <bors@rust-lang.org>2018-08-26 04:02:19 +0000
commit691638582ad1029e77e4ceec3a5f0f6a6449841b (patch)
treeae6bac52a73cca46785ba3680eaecdb27cad7dbe
parent36f14b95a2a2849600f7719007b5fe9c4e9bb569 (diff)
parent40a38b01641d453a7b0f4d6af853d06b8cfef161 (diff)
downloadrust-691638582ad1029e77e4ceec3a5f0f6a6449841b.tar.gz
rust-691638582ad1029e77e4ceec3a5f0f6a6449841b.zip
Auto merge of #53619 - japaric:panic-handler, r=SimonSapin
add #[panic_handler]; deprecate #[panic_implementation]

r? @SimonSapin
cc #44489
-rw-r--r--src/doc/unstable-book/src/language-features/used.md6
-rw-r--r--src/librustc/middle/dead.rs4
-rw-r--r--src/librustc/middle/lang_items.rs4
-rw-r--r--src/librustc/middle/weak_lang_items.rs2
-rw-r--r--src/librustc_typeck/check/mod.rs3
-rw-r--r--src/libstd/lib.rs3
-rw-r--r--src/libstd/panicking.rs3
-rw-r--r--src/libsyntax/feature_gate.rs20
-rw-r--r--src/test/compile-fail/auxiliary/some-panic-impl.rs4
-rw-r--r--src/test/compile-fail/panic-handler-missing.rs (renamed from src/test/compile-fail/panic-implementation-missing.rs)2
-rw-r--r--src/test/compile-fail/panic-handler-twice.rs (renamed from src/test/compile-fail/panic-implementation-twice.rs)4
-rw-r--r--src/test/compile-fail/weak-lang-item.rs2
-rw-r--r--src/test/run-make-fulldeps/issue-51671/app.rs4
-rw-r--r--src/test/run-make-fulldeps/panic-impl-transitive/panic-impl-provider.rs4
-rw-r--r--src/test/run-make/wasm-symbols-not-exported/bar.rs4
-rw-r--r--src/test/ui/alloc-error/alloc-error-handler-bad-signature-1.rs4
-rw-r--r--src/test/ui/alloc-error/alloc-error-handler-bad-signature-2.rs4
-rw-r--r--src/test/ui/alloc-error/alloc-error-handler-bad-signature-3.rs4
-rw-r--r--src/test/ui/consts/const-eval/const_panic_libcore_main.rs4
-rw-r--r--src/test/ui/feature-gates/feature-gate-panic-handler.rs21
-rw-r--r--src/test/ui/feature-gates/feature-gate-panic-handler.stderr11
-rw-r--r--src/test/ui/feature-gates/feature-gate-panic-implementation.rs2
-rw-r--r--src/test/ui/feature-gates/feature-gate-panic-implementation.stderr4
-rw-r--r--src/test/ui/missing/missing-alloc_error_handler.rs4
-rw-r--r--src/test/ui/missing/missing-allocator.rs4
-rw-r--r--src/test/ui/panic-handler/auxiliary/some-panic-impl.rs (renamed from src/test/ui/panic-implementation/auxiliary/some-panic-impl.rs)4
-rw-r--r--src/test/ui/panic-handler/panic-handler-bad-signature-1.rs (renamed from src/test/ui/panic-implementation/panic-implementation-bad-signature-1.rs)4
-rw-r--r--src/test/ui/panic-handler/panic-handler-bad-signature-1.stderr (renamed from src/test/ui/panic-implementation/panic-implementation-bad-signature-1.stderr)4
-rw-r--r--src/test/ui/panic-handler/panic-handler-bad-signature-2.rs (renamed from src/test/ui/panic-implementation/panic-implementation-bad-signature-2.rs)4
-rw-r--r--src/test/ui/panic-handler/panic-handler-bad-signature-2.stderr (renamed from src/test/ui/panic-implementation/panic-implementation-bad-signature-2.stderr)2
-rw-r--r--src/test/ui/panic-handler/panic-handler-bad-signature-3.rs (renamed from src/test/ui/panic-implementation/panic-implementation-bad-signature-3.rs)4
-rw-r--r--src/test/ui/panic-handler/panic-handler-bad-signature-3.stderr (renamed from src/test/ui/panic-implementation/panic-implementation-bad-signature-3.stderr)2
-rw-r--r--src/test/ui/panic-handler/panic-handler-bad-signature-4.rs23
-rw-r--r--src/test/ui/panic-handler/panic-handler-bad-signature-4.stderr11
-rw-r--r--src/test/ui/panic-handler/panic-handler-duplicate.rs (renamed from src/test/ui/panic-implementation/panic-implementation-duplicate.rs)4
-rw-r--r--src/test/ui/panic-handler/panic-handler-duplicate.stderr (renamed from src/test/ui/panic-implementation/panic-implementation-duplicate.stderr)4
-rw-r--r--src/test/ui/panic-handler/panic-handler-requires-panic-info.rs (renamed from src/test/ui/panic-implementation/panic-implementation-requires-panic-info.rs)4
-rw-r--r--src/test/ui/panic-handler/panic-handler-requires-panic-info.stderr (renamed from src/test/ui/panic-implementation/panic-implementation-requires-panic-info.stderr)0
-rw-r--r--src/test/ui/panic-handler/panic-handler-std.rs (renamed from src/test/ui/panic-implementation/panic-implementation-std.rs)4
-rw-r--r--src/test/ui/panic-handler/panic-handler-std.stderr (renamed from src/test/ui/panic-implementation/panic-implementation-std.stderr)2
-rw-r--r--src/test/ui/panic-implementation/panic-implementation-bad-signature-4.stderr11
-rw-r--r--src/test/ui/panic-implementation/panic-implementation-deprecated.rs (renamed from src/test/ui/panic-implementation/panic-implementation-bad-signature-4.rs)7
-rw-r--r--src/test/ui/panic-implementation/panic-implementation-deprecated.stderr14
-rw-r--r--src/test/ui/panic_implementation-closures.rs4
44 files changed, 164 insertions, 79 deletions
diff --git a/src/doc/unstable-book/src/language-features/used.md b/src/doc/unstable-book/src/language-features/used.md
index c3b7f2e41e1..d49271382b6 100644
--- a/src/doc/unstable-book/src/language-features/used.md
+++ b/src/doc/unstable-book/src/language-features/used.md
@@ -87,7 +87,7 @@ This condition can be met using `#[used]` and `#[link_section]` plus a linker
 script.
 
 ``` rust,ignore
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 #![feature(used)]
 #![no_main]
 #![no_std]
@@ -102,8 +102,8 @@ extern "C" fn reset_handler() -> ! {
 #[used]
 static RESET_HANDLER: extern "C" fn() -> ! = reset_handler;
 
-#[panic_implementation]
-fn panic_impl(info: &PanicInfo) -> ! {
+#[panic_handler]
+fn panic(info: &PanicInfo) -> ! {
     loop {}
 }
 ```
diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs
index ba04842ac7c..30701654f29 100644
--- a/src/librustc/middle/dead.rs
+++ b/src/librustc/middle/dead.rs
@@ -293,7 +293,9 @@ fn has_allow_dead_code_or_lang_attr(tcx: TyCtxt,
     }
 
     // (To be) stable attribute for #[lang = "panic_impl"]
-    if attr::contains_name(attrs, "panic_implementation") {
+    if attr::contains_name(attrs, "panic_implementation") ||
+        attr::contains_name(attrs, "panic_handler")
+    {
         return true;
     }
 
diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs
index 8c300a0aba0..d92f856fa4d 100644
--- a/src/librustc/middle/lang_items.rs
+++ b/src/librustc/middle/lang_items.rs
@@ -185,7 +185,9 @@ pub fn extract(attrs: &[ast::Attribute]) -> Option<(Symbol, Span)> {
             if let Some(value) = attribute.value_str() {
                 return Some((value, attribute.span));
             }
-        } else if attribute.check_name("panic_implementation") {
+        } else if attribute.check_name("panic_implementation") ||
+            attribute.check_name("panic_handler")
+        {
             return Some((Symbol::intern("panic_impl"), attribute.span))
         } else if attribute.check_name("alloc_error_handler") {
             return Some((Symbol::intern("oom"), attribute.span))
diff --git a/src/librustc/middle/weak_lang_items.rs b/src/librustc/middle/weak_lang_items.rs
index e8431ce3e10..bfc27e3b580 100644
--- a/src/librustc/middle/weak_lang_items.rs
+++ b/src/librustc/middle/weak_lang_items.rs
@@ -113,7 +113,7 @@ fn verify<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
            !whitelisted(tcx, lang_items::$item) &&
            items.$name().is_none() {
             if lang_items::$item == lang_items::PanicImplLangItem {
-                tcx.sess.err(&format!("`#[panic_implementation]` function required, \
+                tcx.sess.err(&format!("`#[panic_handler]` function required, \
                                         but not found"));
             } else if lang_items::$item == lang_items::OomLangItem {
                 tcx.sess.err(&format!("`#[alloc_error_handler]` function required, \
diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs
index 819827abd05..2b33f289346 100644
--- a/src/librustc_typeck/check/mod.rs
+++ b/src/librustc_typeck/check/mod.rs
@@ -1172,8 +1172,7 @@ fn check_fn<'a, 'gcx, 'tcx>(inherited: &'a Inherited<'a, 'gcx, 'tcx>,
                             if !generics.params.is_empty() {
                                 fcx.tcx.sess.span_err(
                                     span,
-                                    "`#[panic_implementation]` function should have no type \
-                                     parameters",
+                                    "should have no type parameters",
                                 );
                             }
                         }
diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs
index 8b424716746..f8b425bc785 100644
--- a/src/libstd/lib.rs
+++ b/src/libstd/lib.rs
@@ -309,7 +309,8 @@
 #![feature(doc_alias)]
 #![feature(doc_keyword)]
 #![feature(panic_info_message)]
-#![feature(panic_implementation)]
+#![cfg_attr(stage0, feature(panic_implementation))]
+#![cfg_attr(not(stage0), feature(panic_handler))]
 #![feature(non_exhaustive)]
 
 #![default_lib_allocator]
diff --git a/src/libstd/panicking.rs b/src/libstd/panicking.rs
index 862f0fd71b0..6eb2db8e63b 100644
--- a/src/libstd/panicking.rs
+++ b/src/libstd/panicking.rs
@@ -319,7 +319,8 @@ pub fn panicking() -> bool {
 
 /// Entry point of panic from the libcore crate.
 #[cfg(not(test))]
-#[panic_implementation]
+#[cfg_attr(stage0, panic_implementation)]
+#[cfg_attr(not(stage0), panic_handler)]
 #[unwind(allowed)]
 pub fn rust_begin_panic(info: &PanicInfo) -> ! {
     continue_panic_fmt(&info)
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs
index e2a22167b7e..6dd788bf6e2 100644
--- a/src/libsyntax/feature_gate.rs
+++ b/src/libsyntax/feature_gate.rs
@@ -469,8 +469,9 @@ declare_features! (
     // Integer match exhaustiveness checking
     (active, exhaustive_integer_patterns, "1.30.0", Some(50907), None),
 
-    // #[panic_implementation]
+    // RFC 2070: #[panic_implementation] / #[panic_handler]
     (active, panic_implementation, "1.28.0", Some(44489), None),
+    (active, panic_handler, "1.30.0", Some(44489), None),
 
     // #[doc(keyword = "...")]
     (active, doc_keyword, "1.28.0", Some(51315), None),
@@ -1109,11 +1110,20 @@ pub const BUILTIN_ATTRIBUTES: &'static [(&'static str, AttributeType, AttributeG
                                    "infer 'static lifetime requirements",
                                    cfg_fn!(infer_static_outlives_requirements))),
 
+    // RFC 2070 (deprecated attribute name)
+    ("panic_implementation",
+     Normal,
+     Gated(Stability::Deprecated("https://github.com/rust-lang/rust/issues/44489\
+                                  #issuecomment-415140224"),
+           "panic_implementation",
+           "This attribute was renamed to `panic_handler`",
+           cfg_fn!(panic_implementation))),
+
     // RFC 2070
-    ("panic_implementation", Normal, Gated(Stability::Unstable,
-                           "panic_implementation",
-                           "#[panic_implementation] is an unstable feature",
-                           cfg_fn!(panic_implementation))),
+    ("panic_handler", Normal, Gated(Stability::Unstable,
+                                    "panic_handler",
+                                    "#[panic_handler] is an unstable feature",
+                                    cfg_fn!(panic_handler))),
 
     ("alloc_error_handler", Normal, Gated(Stability::Unstable,
                            "alloc_error_handler",
diff --git a/src/test/compile-fail/auxiliary/some-panic-impl.rs b/src/test/compile-fail/auxiliary/some-panic-impl.rs
index db16ac325ac..e3b4fba176e 100644
--- a/src/test/compile-fail/auxiliary/some-panic-impl.rs
+++ b/src/test/compile-fail/auxiliary/some-panic-impl.rs
@@ -11,12 +11,12 @@
 // no-prefer-dynamic
 
 #![crate_type = "rlib"]
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 #![no_std]
 
 use core::panic::PanicInfo;
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(info: &PanicInfo) -> ! {
     loop {}
 }
diff --git a/src/test/compile-fail/panic-implementation-missing.rs b/src/test/compile-fail/panic-handler-missing.rs
index b11081a3e3b..d17c19b4c13 100644
--- a/src/test/compile-fail/panic-implementation-missing.rs
+++ b/src/test/compile-fail/panic-handler-missing.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// error-pattern: `#[panic_implementation]` function required, but not found
+// error-pattern: `#[panic_handler]` function required, but not found
 
 #![feature(lang_items)]
 #![no_main]
diff --git a/src/test/compile-fail/panic-implementation-twice.rs b/src/test/compile-fail/panic-handler-twice.rs
index 78dc545c036..6c9515ca909 100644
--- a/src/test/compile-fail/panic-implementation-twice.rs
+++ b/src/test/compile-fail/panic-handler-twice.rs
@@ -10,7 +10,7 @@
 
 // aux-build:some-panic-impl.rs
 
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 #![feature(lang_items)]
 #![no_std]
 #![no_main]
@@ -19,7 +19,7 @@ extern crate some_panic_impl;
 
 use core::panic::PanicInfo;
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(info: &PanicInfo) -> ! {
     //~^ error duplicate lang item found: `panic_impl`
     loop {}
diff --git a/src/test/compile-fail/weak-lang-item.rs b/src/test/compile-fail/weak-lang-item.rs
index 42972c40674..493c7080181 100644
--- a/src/test/compile-fail/weak-lang-item.rs
+++ b/src/test/compile-fail/weak-lang-item.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // aux-build:weak-lang-items.rs
-// error-pattern: `#[panic_implementation]` function required, but not found
+// error-pattern: `#[panic_handler]` function required, but not found
 // error-pattern: language item required, but not found: `eh_personality`
 // ignore-wasm32-bare compiled with panic=abort, personality not required
 
diff --git a/src/test/run-make-fulldeps/issue-51671/app.rs b/src/test/run-make-fulldeps/issue-51671/app.rs
index 453602b800b..e980b12039e 100644
--- a/src/test/run-make-fulldeps/issue-51671/app.rs
+++ b/src/test/run-make-fulldeps/issue-51671/app.rs
@@ -10,14 +10,14 @@
 
 #![crate_type = "bin"]
 #![feature(lang_items)]
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 #![no_main]
 #![no_std]
 
 use core::alloc::Layout;
 use core::panic::PanicInfo;
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(_: &PanicInfo) -> ! {
     loop {}
 }
diff --git a/src/test/run-make-fulldeps/panic-impl-transitive/panic-impl-provider.rs b/src/test/run-make-fulldeps/panic-impl-transitive/panic-impl-provider.rs
index 46cdf2e2fa5..065b2b6bf18 100644
--- a/src/test/run-make-fulldeps/panic-impl-transitive/panic-impl-provider.rs
+++ b/src/test/run-make-fulldeps/panic-impl-transitive/panic-impl-provider.rs
@@ -9,12 +9,12 @@
 // except according to those terms.
 
 #![crate_type = "rlib"]
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 #![no_std]
 
 use core::panic::PanicInfo;
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(info: &PanicInfo) -> ! {
     loop {}
 }
diff --git a/src/test/run-make/wasm-symbols-not-exported/bar.rs b/src/test/run-make/wasm-symbols-not-exported/bar.rs
index 979ec44b040..061280779b0 100644
--- a/src/test/run-make/wasm-symbols-not-exported/bar.rs
+++ b/src/test/run-make/wasm-symbols-not-exported/bar.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(panic_implementation, alloc_error_handler)]
+#![feature(panic_handler, alloc_error_handler)]
 #![crate_type = "cdylib"]
 #![no_std]
 
@@ -39,7 +39,7 @@ fn a(_: core::alloc::Layout) -> ! {
     loop {}
 }
 
-#[panic_implementation]
+#[panic_handler]
 fn b(_: &core::panic::PanicInfo) -> ! {
     loop {}
 }
diff --git a/src/test/ui/alloc-error/alloc-error-handler-bad-signature-1.rs b/src/test/ui/alloc-error/alloc-error-handler-bad-signature-1.rs
index e398f16a065..0a54ae8341b 100644
--- a/src/test/ui/alloc-error/alloc-error-handler-bad-signature-1.rs
+++ b/src/test/ui/alloc-error/alloc-error-handler-bad-signature-1.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-C panic=abort
 
-#![feature(alloc_error_handler, panic_implementation)]
+#![feature(alloc_error_handler, panic_handler)]
 #![no_std]
 #![no_main]
 
@@ -24,5 +24,5 @@ fn oom(
     loop {}
 }
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(_: &core::panic::PanicInfo) -> ! { loop {} }
diff --git a/src/test/ui/alloc-error/alloc-error-handler-bad-signature-2.rs b/src/test/ui/alloc-error/alloc-error-handler-bad-signature-2.rs
index 4fee9d27e51..b33d82cd550 100644
--- a/src/test/ui/alloc-error/alloc-error-handler-bad-signature-2.rs
+++ b/src/test/ui/alloc-error/alloc-error-handler-bad-signature-2.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-C panic=abort
 
-#![feature(alloc_error_handler, panic_implementation)]
+#![feature(alloc_error_handler, panic_handler)]
 #![no_std]
 #![no_main]
 
@@ -23,5 +23,5 @@ fn oom(
     loop {}
 }
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(_: &core::panic::PanicInfo) -> ! { loop {} }
diff --git a/src/test/ui/alloc-error/alloc-error-handler-bad-signature-3.rs b/src/test/ui/alloc-error/alloc-error-handler-bad-signature-3.rs
index 828a78055d5..0e102dd08ea 100644
--- a/src/test/ui/alloc-error/alloc-error-handler-bad-signature-3.rs
+++ b/src/test/ui/alloc-error/alloc-error-handler-bad-signature-3.rs
@@ -10,7 +10,7 @@
 
 // compile-flags:-C panic=abort
 
-#![feature(alloc_error_handler, panic_implementation)]
+#![feature(alloc_error_handler, panic_handler)]
 #![no_std]
 #![no_main]
 
@@ -21,5 +21,5 @@ fn oom() -> ! { //~ ERROR function should have one argument
     loop {}
 }
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(_: &core::panic::PanicInfo) -> ! { loop {} }
diff --git a/src/test/ui/consts/const-eval/const_panic_libcore_main.rs b/src/test/ui/consts/const-eval/const_panic_libcore_main.rs
index c66e1fe4bf5..f5e5f9778fa 100644
--- a/src/test/ui/consts/const-eval/const_panic_libcore_main.rs
+++ b/src/test/ui/consts/const-eval/const_panic_libcore_main.rs
@@ -10,7 +10,7 @@
 
 #![crate_type = "bin"]
 #![feature(lang_items)]
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 #![feature(const_panic)]
 #![no_main]
 #![no_std]
@@ -31,7 +31,7 @@ fn eh() {}
 #[lang = "eh_unwind_resume"]
 fn eh_unwind_resume() {}
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(_info: &PanicInfo) -> ! {
     loop {}
 }
diff --git a/src/test/ui/feature-gates/feature-gate-panic-handler.rs b/src/test/ui/feature-gates/feature-gate-panic-handler.rs
new file mode 100644
index 00000000000..fd16268ef8b
--- /dev/null
+++ b/src/test/ui/feature-gates/feature-gate-panic-handler.rs
@@ -0,0 +1,21 @@
+// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// compile-flags:-C panic=abort
+
+#![no_std]
+#![no_main]
+
+use core::panic::PanicInfo;
+
+#[panic_handler] //~ ERROR #[panic_handler] is an unstable feature (see issue #44489)
+fn panic(info: &PanicInfo) -> ! {
+    loop {}
+}
diff --git a/src/test/ui/feature-gates/feature-gate-panic-handler.stderr b/src/test/ui/feature-gates/feature-gate-panic-handler.stderr
new file mode 100644
index 00000000000..9680a240a99
--- /dev/null
+++ b/src/test/ui/feature-gates/feature-gate-panic-handler.stderr
@@ -0,0 +1,11 @@
+error[E0658]: #[panic_handler] is an unstable feature (see issue #44489)
+  --> $DIR/feature-gate-panic-handler.rs:18:1
+   |
+LL | #[panic_handler] //~ ERROR #[panic_handler] is an unstable feature (see issue #44489)
+   | ^^^^^^^^^^^^^^^^
+   |
+   = help: add #![feature(panic_handler)] to the crate attributes to enable
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/feature-gates/feature-gate-panic-implementation.rs b/src/test/ui/feature-gates/feature-gate-panic-implementation.rs
index ae9fbc7b13b..84e5f302c16 100644
--- a/src/test/ui/feature-gates/feature-gate-panic-implementation.rs
+++ b/src/test/ui/feature-gates/feature-gate-panic-implementation.rs
@@ -15,7 +15,7 @@
 
 use core::panic::PanicInfo;
 
-#[panic_implementation] //~ ERROR #[panic_implementation] is an unstable feature (see issue #44489)
+#[panic_implementation] //~ ERROR This attribute was renamed to `panic_handler` (see issue #44489)
 fn panic(info: &PanicInfo) -> ! {
     loop {}
 }
diff --git a/src/test/ui/feature-gates/feature-gate-panic-implementation.stderr b/src/test/ui/feature-gates/feature-gate-panic-implementation.stderr
index f99228bef1d..926a49ae831 100644
--- a/src/test/ui/feature-gates/feature-gate-panic-implementation.stderr
+++ b/src/test/ui/feature-gates/feature-gate-panic-implementation.stderr
@@ -1,7 +1,7 @@
-error[E0658]: #[panic_implementation] is an unstable feature (see issue #44489)
+error[E0658]: This attribute was renamed to `panic_handler` (see issue #44489)
   --> $DIR/feature-gate-panic-implementation.rs:18:1
    |
-LL | #[panic_implementation] //~ ERROR #[panic_implementation] is an unstable feature (see issue #44489)
+LL | #[panic_implementation] //~ ERROR This attribute was renamed to `panic_handler` (see issue #44489)
    | ^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: add #![feature(panic_implementation)] to the crate attributes to enable
diff --git a/src/test/ui/missing/missing-alloc_error_handler.rs b/src/test/ui/missing/missing-alloc_error_handler.rs
index 3842d48f8fa..1096027c8dc 100644
--- a/src/test/ui/missing/missing-alloc_error_handler.rs
+++ b/src/test/ui/missing/missing-alloc_error_handler.rs
@@ -13,9 +13,9 @@
 
 #![no_std]
 #![crate_type = "staticlib"]
-#![feature(panic_implementation, alloc_error_handler, alloc)]
+#![feature(panic_handler, alloc_error_handler, alloc)]
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(_: &core::panic::PanicInfo) -> ! {
     loop {}
 }
diff --git a/src/test/ui/missing/missing-allocator.rs b/src/test/ui/missing/missing-allocator.rs
index c949dcb635a..f4331c4b994 100644
--- a/src/test/ui/missing/missing-allocator.rs
+++ b/src/test/ui/missing/missing-allocator.rs
@@ -13,9 +13,9 @@
 
 #![no_std]
 #![crate_type = "staticlib"]
-#![feature(panic_implementation, alloc_error_handler, alloc)]
+#![feature(panic_handler, alloc_error_handler, alloc)]
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(_: &core::panic::PanicInfo) -> ! {
     loop {}
 }
diff --git a/src/test/ui/panic-implementation/auxiliary/some-panic-impl.rs b/src/test/ui/panic-handler/auxiliary/some-panic-impl.rs
index db16ac325ac..e3b4fba176e 100644
--- a/src/test/ui/panic-implementation/auxiliary/some-panic-impl.rs
+++ b/src/test/ui/panic-handler/auxiliary/some-panic-impl.rs
@@ -11,12 +11,12 @@
 // no-prefer-dynamic
 
 #![crate_type = "rlib"]
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 #![no_std]
 
 use core::panic::PanicInfo;
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(info: &PanicInfo) -> ! {
     loop {}
 }
diff --git a/src/test/ui/panic-implementation/panic-implementation-bad-signature-1.rs b/src/test/ui/panic-handler/panic-handler-bad-signature-1.rs
index fec11fdbd7b..cc7e337fc9e 100644
--- a/src/test/ui/panic-implementation/panic-implementation-bad-signature-1.rs
+++ b/src/test/ui/panic-handler/panic-handler-bad-signature-1.rs
@@ -10,13 +10,13 @@
 
 // compile-flags:-C panic=abort
 
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 #![no_std]
 #![no_main]
 
 use core::panic::PanicInfo;
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(
     info: PanicInfo, //~ ERROR argument should be `&PanicInfo`
 ) -> () //~ ERROR return type should be `!`
diff --git a/src/test/ui/panic-implementation/panic-implementation-bad-signature-1.stderr b/src/test/ui/panic-handler/panic-handler-bad-signature-1.stderr
index 0e020fbc78b..5771f4277b4 100644
--- a/src/test/ui/panic-implementation/panic-implementation-bad-signature-1.stderr
+++ b/src/test/ui/panic-handler/panic-handler-bad-signature-1.stderr
@@ -1,11 +1,11 @@
 error: return type should be `!`
-  --> $DIR/panic-implementation-bad-signature-1.rs:22:6
+  --> $DIR/panic-handler-bad-signature-1.rs:22:6
    |
 LL | ) -> () //~ ERROR return type should be `!`
    |      ^^
 
 error: argument should be `&PanicInfo`
-  --> $DIR/panic-implementation-bad-signature-1.rs:21:11
+  --> $DIR/panic-handler-bad-signature-1.rs:21:11
    |
 LL |     info: PanicInfo, //~ ERROR argument should be `&PanicInfo`
    |           ^^^^^^^^^
diff --git a/src/test/ui/panic-implementation/panic-implementation-bad-signature-2.rs b/src/test/ui/panic-handler/panic-handler-bad-signature-2.rs
index 2a628c05699..ec698903c84 100644
--- a/src/test/ui/panic-implementation/panic-implementation-bad-signature-2.rs
+++ b/src/test/ui/panic-handler/panic-handler-bad-signature-2.rs
@@ -10,13 +10,13 @@
 
 // compile-flags:-C panic=abort
 
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 #![no_std]
 #![no_main]
 
 use core::panic::PanicInfo;
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(
     info: &'static PanicInfo, //~ ERROR argument should be `&PanicInfo`
 ) -> !
diff --git a/src/test/ui/panic-implementation/panic-implementation-bad-signature-2.stderr b/src/test/ui/panic-handler/panic-handler-bad-signature-2.stderr
index 71ed1efdcf2..4823f8a2781 100644
--- a/src/test/ui/panic-implementation/panic-implementation-bad-signature-2.stderr
+++ b/src/test/ui/panic-handler/panic-handler-bad-signature-2.stderr
@@ -1,5 +1,5 @@
 error: argument should be `&PanicInfo`
-  --> $DIR/panic-implementation-bad-signature-2.rs:21:11
+  --> $DIR/panic-handler-bad-signature-2.rs:21:11
    |
 LL |     info: &'static PanicInfo, //~ ERROR argument should be `&PanicInfo`
    |           ^^^^^^^^^^^^^^^^^^
diff --git a/src/test/ui/panic-implementation/panic-implementation-bad-signature-3.rs b/src/test/ui/panic-handler/panic-handler-bad-signature-3.rs
index 29337025b70..585716c7c75 100644
--- a/src/test/ui/panic-implementation/panic-implementation-bad-signature-3.rs
+++ b/src/test/ui/panic-handler/panic-handler-bad-signature-3.rs
@@ -10,13 +10,13 @@
 
 // compile-flags:-C panic=abort
 
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 #![no_std]
 #![no_main]
 
 use core::panic::PanicInfo;
 
-#[panic_implementation]
+#[panic_handler]
 fn panic() -> ! { //~ ERROR function should have one argument
     loop {}
 }
diff --git a/src/test/ui/panic-implementation/panic-implementation-bad-signature-3.stderr b/src/test/ui/panic-handler/panic-handler-bad-signature-3.stderr
index 3fd29bcd3e9..0eb0d4e1000 100644
--- a/src/test/ui/panic-implementation/panic-implementation-bad-signature-3.stderr
+++ b/src/test/ui/panic-handler/panic-handler-bad-signature-3.stderr
@@ -1,5 +1,5 @@
 error: function should have one argument
-  --> $DIR/panic-implementation-bad-signature-3.rs:20:1
+  --> $DIR/panic-handler-bad-signature-3.rs:20:1
    |
 LL | / fn panic() -> ! { //~ ERROR function should have one argument
 LL | |     loop {}
diff --git a/src/test/ui/panic-handler/panic-handler-bad-signature-4.rs b/src/test/ui/panic-handler/panic-handler-bad-signature-4.rs
new file mode 100644
index 00000000000..9cda37f27b3
--- /dev/null
+++ b/src/test/ui/panic-handler/panic-handler-bad-signature-4.rs
@@ -0,0 +1,23 @@
+// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// compile-flags:-C panic=abort
+
+#![feature(panic_handler)]
+#![no_std]
+#![no_main]
+
+use core::panic::PanicInfo;
+
+#[panic_handler]
+fn panic<T>(pi: &PanicInfo) -> ! {
+    //~^ ERROR should have no type parameters
+    loop {}
+}
diff --git a/src/test/ui/panic-handler/panic-handler-bad-signature-4.stderr b/src/test/ui/panic-handler/panic-handler-bad-signature-4.stderr
new file mode 100644
index 00000000000..a61b9b3743c
--- /dev/null
+++ b/src/test/ui/panic-handler/panic-handler-bad-signature-4.stderr
@@ -0,0 +1,11 @@
+error: should have no type parameters
+  --> $DIR/panic-handler-bad-signature-4.rs:20:1
+   |
+LL | / fn panic<T>(pi: &PanicInfo) -> ! {
+LL | |     //~^ ERROR should have no type parameters
+LL | |     loop {}
+LL | | }
+   | |_^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/panic-implementation/panic-implementation-duplicate.rs b/src/test/ui/panic-handler/panic-handler-duplicate.rs
index 017113af409..7d7fe251869 100644
--- a/src/test/ui/panic-implementation/panic-implementation-duplicate.rs
+++ b/src/test/ui/panic-handler/panic-handler-duplicate.rs
@@ -11,13 +11,13 @@
 // compile-flags:-C panic=abort
 
 #![feature(lang_items)]
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 #![no_std]
 #![no_main]
 
 use core::panic::PanicInfo;
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(info: &PanicInfo) -> ! {
     loop {}
 }
diff --git a/src/test/ui/panic-implementation/panic-implementation-duplicate.stderr b/src/test/ui/panic-handler/panic-handler-duplicate.stderr
index d553c02379c..d8afaa27e26 100644
--- a/src/test/ui/panic-implementation/panic-implementation-duplicate.stderr
+++ b/src/test/ui/panic-handler/panic-handler-duplicate.stderr
@@ -1,5 +1,5 @@
 error[E0152]: duplicate lang item found: `panic_impl`.
-  --> $DIR/panic-implementation-duplicate.rs:26:1
+  --> $DIR/panic-handler-duplicate.rs:26:1
    |
 LL | / fn panic2(info: &PanicInfo) -> ! { //~ ERROR duplicate lang item found: `panic_impl`.
 LL | |     loop {}
@@ -7,7 +7,7 @@ LL | | }
    | |_^
    |
 note: first defined here.
-  --> $DIR/panic-implementation-duplicate.rs:21:1
+  --> $DIR/panic-handler-duplicate.rs:21:1
    |
 LL | / fn panic(info: &PanicInfo) -> ! {
 LL | |     loop {}
diff --git a/src/test/ui/panic-implementation/panic-implementation-requires-panic-info.rs b/src/test/ui/panic-handler/panic-handler-requires-panic-info.rs
index 597f44d9832..ec68a414f54 100644
--- a/src/test/ui/panic-implementation/panic-implementation-requires-panic-info.rs
+++ b/src/test/ui/panic-handler/panic-handler-requires-panic-info.rs
@@ -13,11 +13,11 @@
 
 #![feature(lang_items)]
 #![feature(no_core)]
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 #![no_core]
 #![no_main]
 
-#[panic_implementation]
+#[panic_handler]
 fn panic() -> ! {
     loop {}
 }
diff --git a/src/test/ui/panic-implementation/panic-implementation-requires-panic-info.stderr b/src/test/ui/panic-handler/panic-handler-requires-panic-info.stderr
index 2bae12efbde..2bae12efbde 100644
--- a/src/test/ui/panic-implementation/panic-implementation-requires-panic-info.stderr
+++ b/src/test/ui/panic-handler/panic-handler-requires-panic-info.stderr
diff --git a/src/test/ui/panic-implementation/panic-implementation-std.rs b/src/test/ui/panic-handler/panic-handler-std.rs
index f25cd3605c1..7cbe0a35bae 100644
--- a/src/test/ui/panic-implementation/panic-implementation-std.rs
+++ b/src/test/ui/panic-handler/panic-handler-std.rs
@@ -10,11 +10,11 @@
 
 // error-pattern: duplicate lang item found: `panic_impl`.
 
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 
 use std::panic::PanicInfo;
 
-#[panic_implementation]
+#[panic_handler]
 fn panic(info: PanicInfo) -> ! {
     loop {}
 }
diff --git a/src/test/ui/panic-implementation/panic-implementation-std.stderr b/src/test/ui/panic-handler/panic-handler-std.stderr
index 5016d502cee..c34a993e2c5 100644
--- a/src/test/ui/panic-implementation/panic-implementation-std.stderr
+++ b/src/test/ui/panic-handler/panic-handler-std.stderr
@@ -1,5 +1,5 @@
 error[E0152]: duplicate lang item found: `panic_impl`.
-  --> $DIR/panic-implementation-std.rs:18:1
+  --> $DIR/panic-handler-std.rs:18:1
    |
 LL | / fn panic(info: PanicInfo) -> ! {
 LL | |     loop {}
diff --git a/src/test/ui/panic-implementation/panic-implementation-bad-signature-4.stderr b/src/test/ui/panic-implementation/panic-implementation-bad-signature-4.stderr
deleted file mode 100644
index 362be2fc3b9..00000000000
--- a/src/test/ui/panic-implementation/panic-implementation-bad-signature-4.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: `#[panic_implementation]` function should have no type parameters
-  --> $DIR/panic-implementation-bad-signature-4.rs:20:1
-   |
-LL | / fn panic<T>(pi: &PanicInfo) -> ! {
-LL | |     //~^ ERROR `#[panic_implementation]` function should have no type parameters
-LL | |     loop {}
-LL | | }
-   | |_^
-
-error: aborting due to previous error
-
diff --git a/src/test/ui/panic-implementation/panic-implementation-bad-signature-4.rs b/src/test/ui/panic-implementation/panic-implementation-deprecated.rs
index d5f942ba2d6..c4bec01f6af 100644
--- a/src/test/ui/panic-implementation/panic-implementation-bad-signature-4.rs
+++ b/src/test/ui/panic-implementation/panic-implementation-deprecated.rs
@@ -10,14 +10,15 @@
 
 // compile-flags:-C panic=abort
 
+#![deny(deprecated)]
 #![feature(panic_implementation)]
 #![no_std]
-#![no_main]
 
 use core::panic::PanicInfo;
 
 #[panic_implementation]
-fn panic<T>(pi: &PanicInfo) -> ! {
-    //~^ ERROR `#[panic_implementation]` function should have no type parameters
+fn panic(info: &PanicInfo) -> ! {
     loop {}
 }
+
+fn main() {}
diff --git a/src/test/ui/panic-implementation/panic-implementation-deprecated.stderr b/src/test/ui/panic-implementation/panic-implementation-deprecated.stderr
new file mode 100644
index 00000000000..43f51447ac4
--- /dev/null
+++ b/src/test/ui/panic-implementation/panic-implementation-deprecated.stderr
@@ -0,0 +1,14 @@
+error: use of deprecated attribute `panic_implementation`: This attribute was renamed to `panic_handler`. See https://github.com/rust-lang/rust/issues/44489#issuecomment-415140224
+  --> $DIR/panic-implementation-deprecated.rs:19:1
+   |
+LL | #[panic_implementation]
+   | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove this attribute
+   |
+note: lint level defined here
+  --> $DIR/panic-implementation-deprecated.rs:13:9
+   |
+LL | #![deny(deprecated)]
+   |         ^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/panic_implementation-closures.rs b/src/test/ui/panic_implementation-closures.rs
index 4fa9a639928..6642db6ee76 100644
--- a/src/test/ui/panic_implementation-closures.rs
+++ b/src/test/ui/panic_implementation-closures.rs
@@ -12,9 +12,9 @@
 
 #![crate_type = "rlib"]
 #![no_std]
-#![feature(panic_implementation)]
+#![feature(panic_handler)]
 
-#[panic_implementation]
+#[panic_handler]
 pub fn panic_fmt(_: &::core::panic::PanicInfo) -> ! {
     |x: u8| x;
     loop {}