Skip to content

Commit a62cf42

Browse files
committed
Port #[rustc_specialization_trait] to the new attribute system
1 parent 35f1480 commit a62cf42

File tree

6 files changed

+19
-3
lines changed

6 files changed

+19
-3
lines changed

compiler/rustc_attr_data_structures/src/attributes.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,9 @@ pub enum AttributeKind {
286286
/// Represents `#[rustc_skip_during_method_dispatch]`.
287287
SkipDuringMethodDispatch { array: bool, boxed_slice: bool, span: Span },
288288

289+
/// Represents `#[rustc_specialization_trait]`.
290+
SpecializationTrait(Span),
291+
289292
/// Represents `#[stable]`, `#[unstable]` and `#[rustc_allowed_through_unstable_modules]`.
290293
Stability {
291294
stability: Stability,

compiler/rustc_attr_parsing/src/attributes/traits.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,13 @@ impl<S: Stage> NoArgsAttributeParser<S> for TypeConstParser {
104104
AttributeKind::TypeConst(span)
105105
}
106106
}
107+
108+
pub(crate) struct SpecializationTraitParser;
109+
impl<S: Stage> NoArgsAttributeParser<S> for SpecializationTraitParser {
110+
const PATH: &[Symbol] = &[sym::rustc_specialization_trait];
111+
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
112+
113+
fn create(span: Span) -> AttributeKind {
114+
AttributeKind::SpecializationTrait(span)
115+
}
116+
}

compiler/rustc_attr_parsing/src/context.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use crate::attributes::stability::{
2929
};
3030
use crate::attributes::traits::{
3131
CoinductiveParser, ConstTraitParser, DenyExplicitImplParser, DoNotImplementViaObjectParser,
32-
SkipDuringMethodDispatchParser, TypeConstParser,
32+
SkipDuringMethodDispatchParser, SpecializationTraitParser, TypeConstParser,
3333
};
3434
use crate::attributes::transparency::TransparencyParser;
3535
use crate::attributes::{AttributeParser as _, Combine, Single, WithoutArgs};
@@ -136,6 +136,7 @@ attribute_parsers!(
136136
Single<WithoutArgs<NoMangleParser>>,
137137
Single<WithoutArgs<PassByValueParser>>,
138138
Single<WithoutArgs<PubTransparentParser>>,
139+
Single<WithoutArgs<SpecializationTraitParser>>,
139140
Single<WithoutArgs<TypeConstParser>>,
140141
// tidy-alphabetical-end
141142
];

compiler/rustc_hir_analysis/src/collect.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1162,7 +1162,7 @@ fn trait_def(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::TraitDef {
11621162
let specialization_kind =
11631163
if attrs.iter().any(|attr| attr.has_name(sym::rustc_unsafe_specialization_marker)) {
11641164
ty::trait_def::TraitSpecializationKind::Marker
1165-
} else if attrs.iter().any(|attr| attr.has_name(sym::rustc_specialization_trait)) {
1165+
} else if find_attr!(attrs, AttributeKind::SpecializationTrait(_)) {
11661166
ty::trait_def::TraitSpecializationKind::AlwaysApplicable
11671167
} else {
11681168
ty::trait_def::TraitSpecializationKind::None

compiler/rustc_parse/src/validate_attr.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ fn emit_malformed_attribute(
300300
| sym::rustc_do_not_implement_via_object
301301
| sym::rustc_coinductive
302302
| sym::const_trait
303+
| sym::rustc_specialization_trait
303304
| sym::type_const
304305
| sym::rustc_pass_by_value
305306
| sym::repr

compiler/rustc_passes/src/check_attr.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
123123
| AttributeKind::Coinductive(attr_span)
124124
| AttributeKind::ConstTrait(attr_span)
125125
| AttributeKind::DenyExplicitImpl(attr_span)
126-
| AttributeKind::DoNotImplementViaObject(attr_span),
126+
| AttributeKind::DoNotImplementViaObject(attr_span)
127+
| AttributeKind::SpecializationTrait(attr_span),
127128
) => {
128129
self.check_must_be_applied_to_trait(*attr_span, span, target);
129130
}

0 commit comments

Comments
 (0)