summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_lint/src/lints.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_lint/src/lints.rs')
-rw-r--r--compiler/rustc_lint/src/lints.rs159
1 files changed, 95 insertions, 64 deletions
diff --git a/compiler/rustc_lint/src/lints.rs b/compiler/rustc_lint/src/lints.rs
index 756899e50..9c0d3be03 100644
--- a/compiler/rustc_lint/src/lints.rs
+++ b/compiler/rustc_lint/src/lints.rs
@@ -134,12 +134,8 @@ pub struct BuiltinMissingDebugImpl<'a> {
// Needed for def_path_str
impl<'a> DecorateLint<'a, ()> for BuiltinMissingDebugImpl<'_> {
- fn decorate_lint<'b>(
- self,
- diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
- ) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
+ fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
diag.set_arg("debug", self.tcx.def_path_str(self.def_id));
- diag
}
fn msg(&self) -> DiagnosticMessage {
@@ -243,17 +239,13 @@ pub struct BuiltinUngatedAsyncFnTrackCaller<'a> {
}
impl<'a> DecorateLint<'a, ()> for BuiltinUngatedAsyncFnTrackCaller<'_> {
- fn decorate_lint<'b>(
- self,
- diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
- ) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
+ fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
diag.span_label(self.label, fluent::lint_label);
rustc_session::parse::add_feature_diagnostics(
diag,
- &self.parse_sess,
+ self.parse_sess,
sym::async_fn_track_caller,
);
- diag
}
fn msg(&self) -> DiagnosticMessage {
@@ -433,10 +425,7 @@ pub struct BuiltinUnpermittedTypeInit<'a> {
}
impl<'a> DecorateLint<'a, ()> for BuiltinUnpermittedTypeInit<'_> {
- fn decorate_lint<'b>(
- self,
- diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
- ) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
+ fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
diag.set_arg("ty", self.ty);
diag.span_label(self.label, fluent::lint_builtin_unpermitted_type_init_label);
if let InhabitedPredicate::True = self.ty.inhabited_predicate(self.tcx) {
@@ -447,7 +436,6 @@ impl<'a> DecorateLint<'a, ()> for BuiltinUnpermittedTypeInit<'_> {
);
}
self.sub.add_to_diagnostic(diag);
- diag
}
fn msg(&self) -> rustc_errors::DiagnosticMessage {
@@ -553,33 +541,21 @@ pub enum BuiltinSpecialModuleNameUsed {
Main,
}
-#[derive(LintDiagnostic)]
-#[diag(lint_builtin_unexpected_cli_config_name)]
-#[help]
-pub struct BuiltinUnexpectedCliConfigName {
- pub name: Symbol,
-}
-
-#[derive(LintDiagnostic)]
-#[diag(lint_builtin_unexpected_cli_config_value)]
-#[help]
-pub struct BuiltinUnexpectedCliConfigValue {
- pub name: Symbol,
- pub value: Symbol,
-}
-
// deref_into_dyn_supertrait.rs
#[derive(LintDiagnostic)]
#[diag(lint_supertrait_as_deref_target)]
pub struct SupertraitAsDerefTarget<'a> {
- pub t: Ty<'a>,
+ pub self_ty: Ty<'a>,
+ pub supertrait_principal: PolyExistentialTraitRef<'a>,
pub target_principal: PolyExistentialTraitRef<'a>,
+ #[label]
+ pub label: Span,
#[subdiagnostic]
- pub label: Option<SupertraitAsDerefTargetLabel>,
+ pub label2: Option<SupertraitAsDerefTargetLabel>,
}
#[derive(Subdiagnostic)]
-#[label(lint_label)]
+#[label(lint_label2)]
pub struct SupertraitAsDerefTargetLabel {
#[primary_span]
pub label: Span,
@@ -1170,10 +1146,7 @@ pub struct NonFmtPanicUnused {
// Used because of two suggestions based on one Option<Span>
impl<'a> DecorateLint<'a, ()> for NonFmtPanicUnused {
- fn decorate_lint<'b>(
- self,
- diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
- ) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
+ fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
diag.set_arg("count", self.count);
diag.note(fluent::lint_note);
if let Some(span) = self.suggestion {
@@ -1190,7 +1163,6 @@ impl<'a> DecorateLint<'a, ()> for NonFmtPanicUnused {
Applicability::MachineApplicable,
);
}
- diag
}
fn msg(&self) -> rustc_errors::DiagnosticMessage {
@@ -1369,12 +1341,9 @@ pub struct DropTraitConstraintsDiag<'a> {
// Needed for def_path_str
impl<'a> DecorateLint<'a, ()> for DropTraitConstraintsDiag<'_> {
- fn decorate_lint<'b>(
- self,
- diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
- ) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
+ fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
diag.set_arg("predicate", self.predicate);
- diag.set_arg("needs_drop", self.tcx.def_path_str(self.def_id))
+ diag.set_arg("needs_drop", self.tcx.def_path_str(self.def_id));
}
fn msg(&self) -> rustc_errors::DiagnosticMessage {
@@ -1389,11 +1358,8 @@ pub struct DropGlue<'a> {
// Needed for def_path_str
impl<'a> DecorateLint<'a, ()> for DropGlue<'_> {
- fn decorate_lint<'b>(
- self,
- diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
- ) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
- diag.set_arg("needs_drop", self.tcx.def_path_str(self.def_id))
+ fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
+ diag.set_arg("needs_drop", self.tcx.def_path_str(self.def_id));
}
fn msg(&self) -> rustc_errors::DiagnosticMessage {
@@ -1585,6 +1551,76 @@ pub enum InvalidNanComparisonsSuggestion {
Spanless,
}
+#[derive(LintDiagnostic)]
+pub enum AmbiguousWidePointerComparisons<'a> {
+ #[diag(lint_ambiguous_wide_pointer_comparisons)]
+ Spanful {
+ #[subdiagnostic]
+ addr_suggestion: AmbiguousWidePointerComparisonsAddrSuggestion<'a>,
+ #[subdiagnostic]
+ addr_metadata_suggestion: Option<AmbiguousWidePointerComparisonsAddrMetadataSuggestion<'a>>,
+ },
+ #[diag(lint_ambiguous_wide_pointer_comparisons)]
+ #[help(lint_addr_metadata_suggestion)]
+ #[help(lint_addr_suggestion)]
+ Spanless,
+}
+
+#[derive(Subdiagnostic)]
+#[multipart_suggestion(
+ lint_addr_metadata_suggestion,
+ style = "verbose",
+ applicability = "machine-applicable"
+)]
+pub struct AmbiguousWidePointerComparisonsAddrMetadataSuggestion<'a> {
+ pub ne: &'a str,
+ pub deref_left: &'a str,
+ pub deref_right: &'a str,
+ #[suggestion_part(code = "{ne}std::ptr::eq({deref_left}")]
+ pub left: Span,
+ #[suggestion_part(code = ", {deref_right}")]
+ pub middle: Span,
+ #[suggestion_part(code = ")")]
+ pub right: Span,
+}
+
+#[derive(Subdiagnostic)]
+pub enum AmbiguousWidePointerComparisonsAddrSuggestion<'a> {
+ #[multipart_suggestion(
+ lint_addr_suggestion,
+ style = "verbose",
+ applicability = "machine-applicable"
+ )]
+ AddrEq {
+ ne: &'a str,
+ deref_left: &'a str,
+ deref_right: &'a str,
+ #[suggestion_part(code = "{ne}std::ptr::addr_eq({deref_left}")]
+ left: Span,
+ #[suggestion_part(code = ", {deref_right}")]
+ middle: Span,
+ #[suggestion_part(code = ")")]
+ right: Span,
+ },
+ #[multipart_suggestion(
+ lint_addr_suggestion,
+ style = "verbose",
+ applicability = "machine-applicable"
+ )]
+ Cast {
+ deref_left: &'a str,
+ deref_right: &'a str,
+ #[suggestion_part(code = "{deref_left}")]
+ left_before: Option<Span>,
+ #[suggestion_part(code = " as *const ()")]
+ left: Span,
+ #[suggestion_part(code = "{deref_right}")]
+ right_before: Option<Span>,
+ #[suggestion_part(code = " as *const ()")]
+ right: Span,
+ },
+}
+
pub struct ImproperCTypes<'a> {
pub ty: Ty<'a>,
pub desc: &'a str,
@@ -1596,10 +1632,7 @@ pub struct ImproperCTypes<'a> {
// Used because of the complexity of Option<DiagnosticMessage>, DiagnosticMessage, and Option<Span>
impl<'a> DecorateLint<'a, ()> for ImproperCTypes<'_> {
- fn decorate_lint<'b>(
- self,
- diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
- ) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
+ fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
diag.set_arg("ty", self.ty);
diag.set_arg("desc", self.desc);
diag.span_label(self.label, fluent::lint_label);
@@ -1610,7 +1643,6 @@ impl<'a> DecorateLint<'a, ()> for ImproperCTypes<'_> {
if let Some(note) = self.span_note {
diag.span_note(note, fluent::lint_note);
}
- diag
}
fn msg(&self) -> rustc_errors::DiagnosticMessage {
@@ -1743,10 +1775,7 @@ pub enum UnusedDefSuggestion {
// Needed because of def_path_str
impl<'a> DecorateLint<'a, ()> for UnusedDef<'_, '_> {
- fn decorate_lint<'b>(
- self,
- diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
- ) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
+ fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
diag.set_arg("pre", self.pre);
diag.set_arg("post", self.post);
diag.set_arg("def", self.cx.tcx.def_path_str(self.def_id));
@@ -1757,7 +1786,6 @@ impl<'a> DecorateLint<'a, ()> for UnusedDef<'_, '_> {
if let Some(sugg) = self.suggestion {
diag.subdiagnostic(sugg);
}
- diag
}
fn msg(&self) -> rustc_errors::DiagnosticMessage {
@@ -1830,18 +1858,21 @@ pub struct AsyncFnInTraitDiag {
}
impl<'a> DecorateLint<'a, ()> for AsyncFnInTraitDiag {
- fn decorate_lint<'b>(
- self,
- diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>,
- ) -> &'b mut rustc_errors::DiagnosticBuilder<'a, ()> {
+ fn decorate_lint<'b>(self, diag: &'b mut rustc_errors::DiagnosticBuilder<'a, ()>) {
diag.note(fluent::lint_note);
if let Some(sugg) = self.sugg {
diag.multipart_suggestion(fluent::lint_suggestion, sugg, Applicability::MaybeIncorrect);
}
- diag
}
fn msg(&self) -> rustc_errors::DiagnosticMessage {
fluent::lint_async_fn_in_trait
}
}
+
+#[derive(LintDiagnostic)]
+#[diag(lint_unit_bindings)]
+pub struct UnitBindingsDiag {
+ #[label]
+ pub label: Span,
+}