@@ -8,6 +8,8 @@ use rustc_middle::middle::lang_items::required;
88use rustc_middle:: ty:: TyCtxt ;
99use rustc_session:: config:: CrateType ;
1010
11+ use crate :: errors:: { MissingAllocErrorHandler , MissingLangItem , MissingPanicHandler } ;
12+
1113/// Checks the crate for usage of weak lang items, returning a vector of all the
1214/// language items required by this crate, but not defined yet.
1315pub fn check_crate < ' tcx > ( tcx : TyCtxt < ' tcx > , items : & mut lang_items:: LanguageItems ) {
@@ -71,20 +73,13 @@ fn verify<'tcx>(tcx: TyCtxt<'tcx>, items: &lang_items::LanguageItems) {
7173 for ( name, & item) in WEAK_ITEMS_REFS . iter ( ) {
7274 if missing. contains ( & item) && required ( tcx, item) && items. require ( item) . is_err ( ) {
7375 if item == LangItem :: PanicImpl {
74- tcx. sess . err ( "`#[panic_handler]` function required, but not found" ) ;
76+ tcx. sess . emit_err ( MissingPanicHandler ) ;
7577 } else if item == LangItem :: Oom {
7678 if !tcx. features ( ) . default_alloc_error_handler {
77- tcx. sess . err ( "`#[alloc_error_handler]` function required, but not found" ) ;
78- tcx. sess . note_without_error ( "use `#![feature(default_alloc_error_handler)]` for a default error handler" ) ;
79+ tcx. sess . emit_err ( MissingAllocErrorHandler ) ;
7980 }
8081 } else {
81- tcx
82- . sess
83- . diagnostic ( )
84- . struct_err ( & format ! ( "language item required, but not found: `{}`" , name) )
85- . note ( & format ! ( "this can occur when a binary crate with `#![no_std]` is compiled for a target where `{}` is defined in the standard library" , name) )
86- . help ( & format ! ( "you may be able to compile for a target that doesn't need `{}`, specify a target with `--target` or in `.cargo/config`" , name) )
87- . emit ( ) ;
82+ tcx. sess . emit_err ( MissingLangItem { name : * name } ) ;
8883 }
8984 }
9085 }
0 commit comments