Stop mentioning internal lang items in no_std binary errors
When writing a no_std binary, you'll be greeted with nonsensical errors mentioning lang items like eh_personality and start. That's pretty bad because it makes you think that you need to define them somewhere! But oh no, now you're getting the `internal_features` lint telling you that you shouldn't use them! But you need a no_std binary! What now? No problem! Writing a no_std binary is super easy. Just use panic=abort and supply your own platform specific entrypoint symbol (like `main`) and you're good to go. Would be nice if the compiler told you that, right? This makes it so that it does do that.
This commit is contained in:
parent
a2d9d73e60
commit
da26317a8a
16 changed files with 85 additions and 16 deletions
|
@ -194,7 +194,7 @@ use rustc_target::abi::Size;
|
|||
use std::path::PathBuf;
|
||||
|
||||
use crate::errors::{
|
||||
EncounteredErrorWhileInstantiating, LargeAssignmentsLint, NoOptimizedMir, RecursionLimit,
|
||||
self, EncounteredErrorWhileInstantiating, LargeAssignmentsLint, NoOptimizedMir, RecursionLimit,
|
||||
TypeLengthLimit,
|
||||
};
|
||||
|
||||
|
@ -1272,7 +1272,9 @@ impl<'v> RootCollector<'_, 'v> {
|
|||
return;
|
||||
};
|
||||
|
||||
let start_def_id = self.tcx.require_lang_item(LangItem::Start, None);
|
||||
let Some(start_def_id) = self.tcx.lang_items().start_fn() else {
|
||||
self.tcx.dcx().emit_fatal(errors::StartNotFound);
|
||||
};
|
||||
let main_ret_ty = self.tcx.fn_sig(main_def_id).no_bound_vars().unwrap().output();
|
||||
|
||||
// Given that `main()` has no arguments,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue