lint: don't suggest assume_init for uninhabited types
This commit is contained in:
parent
3eb5c4581a
commit
0610df9314
6 changed files with 32 additions and 59 deletions
|
@ -8,7 +8,9 @@ use rustc_errors::{
|
|||
};
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_macros::{LintDiagnostic, Subdiagnostic};
|
||||
use rustc_middle::ty::{PolyExistentialTraitRef, Predicate, Ty, TyCtxt};
|
||||
use rustc_middle::ty::{
|
||||
inhabitedness::InhabitedPredicate, PolyExistentialTraitRef, Predicate, Ty, TyCtxt,
|
||||
};
|
||||
use rustc_session::parse::ParseSess;
|
||||
use rustc_span::{edition::Edition, sym, symbol::Ident, Span, Symbol};
|
||||
|
||||
|
@ -419,6 +421,7 @@ pub struct BuiltinUnpermittedTypeInit<'a> {
|
|||
pub ty: Ty<'a>,
|
||||
pub label: Span,
|
||||
pub sub: BuiltinUnpermittedTypeInitSub,
|
||||
pub tcx: TyCtxt<'a>,
|
||||
}
|
||||
|
||||
impl<'a> DecorateLint<'a, ()> for BuiltinUnpermittedTypeInit<'_> {
|
||||
|
@ -428,7 +431,13 @@ impl<'a> DecorateLint<'a, ()> for BuiltinUnpermittedTypeInit<'_> {
|
|||
) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
|
||||
diag.set_arg("ty", self.ty);
|
||||
diag.span_label(self.label, fluent::lint_builtin_unpermitted_type_init_label);
|
||||
diag.span_label(self.label, fluent::lint_builtin_unpermitted_type_init_label_suggestion);
|
||||
if let InhabitedPredicate::True = self.ty.inhabited_predicate(self.tcx) {
|
||||
// Only suggest late `MaybeUninit::assume_init` initialization if the type is inhabited.
|
||||
diag.span_label(
|
||||
self.label,
|
||||
fluent::lint_builtin_unpermitted_type_init_label_suggestion,
|
||||
);
|
||||
}
|
||||
self.sub.add_to_diagnostic(diag);
|
||||
diag
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue