Skip to content

Commit 3612b27

Browse files
committed
Port #[rustc_deny_explicit_impl] to the new attribute system
1 parent 9c4061c commit 3612b27

File tree

7 files changed

+19
-4
lines changed

7 files changed

+19
-4
lines changed

compiler/rustc_attr_data_structures/src/attributes.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,9 @@ pub enum AttributeKind {
239239
/// Represents `#[const_trait]`.
240240
ConstTrait(Span),
241241

242+
///Represents `#[rustc_deny_explicit_impl]`.
243+
DenyExplicitImpl(Span),
244+
242245
/// Represents [`#[deprecated]`](https://doc.rust-lang.org/stable/reference/attributes/diagnostics.html#the-deprecated-attribute).
243246
Deprecation { deprecation: Deprecation, span: Span },
244247

compiler/rustc_attr_data_structures/src/encode_cross_crate.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ impl AttributeKind {
2424
ConstStability { .. } => Yes,
2525
ConstStabilityIndirect => No,
2626
ConstTrait(..) => No,
27+
DenyExplicitImpl(..) => No,
2728
Deprecation { .. } => Yes,
2829
DocComment { .. } => Yes,
2930
ExportName { .. } => Yes,

compiler/rustc_attr_parsing/src/attributes/traits.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,10 @@ impl<S: Stage> NoArgsAttributeParser<S> for ConstTraitParser {
6161
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
6262
const CREATE: fn(Span) -> AttributeKind = AttributeKind::ConstTrait;
6363
}
64+
65+
pub(crate) struct DenyExplicitImplParser;
66+
impl<S: Stage> NoArgsAttributeParser<S> for DenyExplicitImplParser {
67+
const PATH: &[Symbol] = &[sym::rustc_deny_explicit_impl];
68+
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
69+
const CREATE: fn(Span) -> AttributeKind = AttributeKind::DenyExplicitImpl;
70+
}

compiler/rustc_attr_parsing/src/context.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ use crate::attributes::semantics::MayDangleParser;
3636
use crate::attributes::stability::{
3737
BodyStabilityParser, ConstStabilityIndirectParser, ConstStabilityParser, StabilityParser,
3838
};
39-
use crate::attributes::traits::{ConstTraitParser, SkipDuringMethodDispatchParser};
39+
use crate::attributes::traits::{
40+
ConstTraitParser, DenyExplicitImplParser, SkipDuringMethodDispatchParser,
41+
};
4042
use crate::attributes::transparency::TransparencyParser;
4143
use crate::attributes::{AttributeParser as _, Combine, Single, WithoutArgs};
4244
use crate::parser::{ArgParser, MetaItemParser, PathParser};
@@ -141,6 +143,7 @@ attribute_parsers!(
141143
Single<WithoutArgs<ConstContinueParser>>,
142144
Single<WithoutArgs<ConstStabilityIndirectParser>>,
143145
Single<WithoutArgs<ConstTraitParser>>,
146+
Single<WithoutArgs<DenyExplicitImplParser>>,
144147
Single<WithoutArgs<LoopMatchParser>>,
145148
Single<WithoutArgs<MayDangleParser>>,
146149
Single<WithoutArgs<NoImplicitPreludeParser>>,

compiler/rustc_hir_analysis/src/collect.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -965,7 +965,7 @@ fn trait_def(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::TraitDef {
965965
no_dups.then_some(list)
966966
});
967967

968-
let deny_explicit_impl = attrs.iter().any(|attr| attr.has_name(sym::rustc_deny_explicit_impl));
968+
let deny_explicit_impl = find_attr!(attrs, AttributeKind::DenyExplicitImpl(_));
969969
let implement_via_object =
970970
!attrs.iter().any(|attr| attr.has_name(sym::rustc_do_not_implement_via_object));
971971

compiler/rustc_parse/src/validate_attr.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ fn emit_malformed_attribute(
294294
| sym::rustc_confusables
295295
| sym::rustc_skip_during_method_dispatch
296296
| sym::rustc_pass_by_value
297+
| sym::rustc_deny_explicit_impl
297298
| sym::const_trait
298299
| sym::repr
299300
| sym::align

compiler/rustc_passes/src/check_attr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,8 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
122122
match attr {
123123
Attribute::Parsed(
124124
AttributeKind::SkipDuringMethodDispatch { span: attr_span, .. }
125-
| AttributeKind::ConstTrait(attr_span),
125+
| AttributeKind::ConstTrait(attr_span)
126+
| AttributeKind::DenyExplicitImpl(attr_span),
126127
) => {
127128
self.check_must_be_applied_to_trait(*attr_span, span, target);
128129
}
@@ -281,7 +282,6 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
281282
| [sym::rustc_then_this_would_need, ..] => self.check_rustc_dirty_clean(attr),
282283
[sym::rustc_coinductive, ..]
283284
| [sym::rustc_must_implement_one_of, ..]
284-
| [sym::rustc_deny_explicit_impl, ..]
285285
| [sym::rustc_do_not_implement_via_object, ..]
286286
=> self.check_must_be_applied_to_trait(attr.span(), span, target),
287287
[sym::collapse_debuginfo, ..] => self.check_collapse_debuginfo(attr, span, target),

0 commit comments

Comments
 (0)