diff options
| author | lcnr <rust@lcnr.de> | 2022-04-28 16:26:30 +0200 |
|---|---|---|
| committer | lcnr <rust@lcnr.de> | 2022-05-05 10:53:00 +0200 |
| commit | 209dd2cb0a1cab685b9facdbbd8b62c796f58380 (patch) | |
| tree | dcacc496b0e96a7cf5cfc600378d8f6f1163a093 /compiler/rustc_passes | |
| parent | 12d3f107c1634ed41a800e220ccf99b665d906d8 (diff) | |
| download | rust-209dd2cb0a1cab685b9facdbbd8b62c796f58380.tar.gz rust-209dd2cb0a1cab685b9facdbbd8b62c796f58380.zip | |
generalize "incoherent impls" impl for custom types
Diffstat (limited to 'compiler/rustc_passes')
| -rw-r--r-- | compiler/rustc_passes/src/check_attr.rs | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/compiler/rustc_passes/src/check_attr.rs b/compiler/rustc_passes/src/check_attr.rs index a9444972130..aa933043195 100644 --- a/compiler/rustc_passes/src/check_attr.rs +++ b/compiler/rustc_passes/src/check_attr.rs @@ -124,6 +124,9 @@ impl CheckAttrVisitor<'_> { sym::rustc_allow_incoherent_impl => { self.check_allow_incoherent_impl(&attr, span, target) } + sym::rustc_has_incoherent_inherent_impls => { + self.check_has_incoherent_inherent_impls(&attr, span, target) + } sym::rustc_const_unstable | sym::rustc_const_stable | sym::unstable @@ -1095,7 +1098,6 @@ impl CheckAttrVisitor<'_> { } } - /// Warns against some misuses of `#[pass_by_value]` fn check_allow_incoherent_impl(&self, attr: &Attribute, span: Span, target: Target) -> bool { match target { Target::Method(MethodKind::Inherent) => true, @@ -1113,6 +1115,30 @@ impl CheckAttrVisitor<'_> { } } + fn check_has_incoherent_inherent_impls( + &self, + attr: &Attribute, + span: Span, + target: Target, + ) -> bool { + match target { + Target::Trait | Target::Struct | Target::Enum | Target::Union | Target::ForeignTy => { + true + } + _ => { + self.tcx + .sess + .struct_span_err( + attr.span, + "`rustc_has_incoherent_inherent_impls` attribute should be applied to types or traits.", + ) + .span_label(span, "only adts, extern types and traits are supported") + .emit(); + false + } + } + } + /// Warns against some misuses of `#[must_use]` fn check_must_use(&self, hir_id: HirId, attr: &Attribute, span: Span, target: Target) -> bool { let node = self.tcx.hir().get(hir_id); |
