Skip to content

Commit adb325f

Browse files
committed
Port #[rustc_do_not_implement_via_object] to the new attribute system
1 parent 938916d commit adb325f

File tree

7 files changed

+18
-5
lines changed

7 files changed

+18
-5
lines changed

compiler/rustc_attr_data_structures/src/attributes.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,9 @@ pub enum AttributeKind {
243243
/// Represents [`#[deprecated]`](https://doc.rust-lang.org/stable/reference/attributes/diagnostics.html#the-deprecated-attribute).
244244
Deprecation { deprecation: Deprecation, span: Span },
245245

246+
/// Represents `#[rustc_do_not_implement_via_object]`.
247+
DoNotImplementViaObject(Span),
248+
246249
/// Represents [`#[doc]`](https://doc.rust-lang.org/stable/rustdoc/write-documentation/the-doc-attribute.html).
247250
DocComment { style: AttrStyle, kind: CommentKind, span: Span, comment: Symbol },
248251

compiler/rustc_attr_data_structures/src/encode_cross_crate.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ impl AttributeKind {
2626
ConstTrait(..) => No,
2727
DenyExplicitImpl(..) => No,
2828
Deprecation { .. } => Yes,
29+
DoNotImplementViaObject(..) => No,
2930
DocComment { .. } => Yes,
3031
Dummy => No,
3132
ExportName { .. } => Yes,

compiler/rustc_attr_parsing/src/attributes/traits.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,10 @@ impl<S: Stage> NoArgsAttributeParser<S> for DenyExplicitImplParser {
6868
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
6969
const CREATE: fn(Span) -> AttributeKind = AttributeKind::DenyExplicitImpl;
7070
}
71+
72+
pub(crate) struct DoNotImplementViaObjectParser;
73+
impl<S: Stage> NoArgsAttributeParser<S> for DoNotImplementViaObjectParser {
74+
const PATH: &[Symbol] = &[sym::rustc_do_not_implement_via_object];
75+
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
76+
const CREATE: fn(Span) -> AttributeKind = AttributeKind::DoNotImplementViaObject;
77+
}

compiler/rustc_attr_parsing/src/context.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ use crate::attributes::stability::{
4444
};
4545
use crate::attributes::test_attrs::IgnoreParser;
4646
use crate::attributes::traits::{
47-
ConstTraitParser, DenyExplicitImplParser, SkipDuringMethodDispatchParser,
47+
ConstTraitParser, DenyExplicitImplParser, DoNotImplementViaObjectParser,
48+
SkipDuringMethodDispatchParser,
4849
};
4950
use crate::attributes::transparency::TransparencyParser;
5051
use crate::attributes::{AttributeParser as _, Combine, Single, WithoutArgs};
@@ -154,6 +155,7 @@ attribute_parsers!(
154155
Single<WithoutArgs<ConstStabilityIndirectParser>>,
155156
Single<WithoutArgs<ConstTraitParser>>,
156157
Single<WithoutArgs<DenyExplicitImplParser>>,
158+
Single<WithoutArgs<DoNotImplementViaObjectParser>>,
157159
Single<WithoutArgs<ExportStableParser>>,
158160
Single<WithoutArgs<FfiConstParser>>,
159161
Single<WithoutArgs<FfiPureParser>>,

compiler/rustc_hir_analysis/src/collect.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -962,8 +962,7 @@ fn trait_def(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::TraitDef {
962962
});
963963

964964
let deny_explicit_impl = find_attr!(attrs, AttributeKind::DenyExplicitImpl(_));
965-
let implement_via_object =
966-
!attrs.iter().any(|attr| attr.has_name(sym::rustc_do_not_implement_via_object));
965+
let implement_via_object = !find_attr!(attrs, AttributeKind::DoNotImplementViaObject(_));
967966

968967
ty::TraitDef {
969968
def_id: def_id.to_def_id(),

compiler/rustc_parse/src/validate_attr.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@ pub fn check_builtin_meta_item(
284284
| sym::rustc_skip_during_method_dispatch
285285
| sym::rustc_pass_by_value
286286
| sym::rustc_deny_explicit_impl
287+
| sym::rustc_do_not_implement_via_object
287288
| sym::const_trait
288289
| sym::repr
289290
| sym::align

compiler/rustc_passes/src/check_attr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
123123
Attribute::Parsed(
124124
AttributeKind::SkipDuringMethodDispatch { span: attr_span, .. }
125125
| AttributeKind::ConstTrait(attr_span)
126-
| AttributeKind::DenyExplicitImpl(attr_span),
126+
| AttributeKind::DenyExplicitImpl(attr_span)
127+
| AttributeKind::DoNotImplementViaObject(attr_span),
127128
) => {
128129
self.check_must_be_applied_to_trait(*attr_span, span, target);
129130
}
@@ -300,7 +301,6 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
300301
| [sym::rustc_then_this_would_need, ..] => self.check_rustc_dirty_clean(attr),
301302
[sym::rustc_coinductive, ..]
302303
| [sym::rustc_must_implement_one_of, ..]
303-
| [sym::rustc_do_not_implement_via_object, ..]
304304
=> self.check_must_be_applied_to_trait(attr.span(), span, target),
305305
[sym::collapse_debuginfo, ..] => self.check_collapse_debuginfo(attr, span, target),
306306
[sym::must_not_suspend, ..] => self.check_must_not_suspend(attr, span, target),

0 commit comments

Comments
 (0)