Skip to content

Commit 6193783

Browse files
committed
Port #[rustc_specialization_trait] to the new attribute system
1 parent 813ec60 commit 6193783

File tree

7 files changed

+17
-3
lines changed

7 files changed

+17
-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
@@ -343,6 +343,9 @@ pub enum AttributeKind {
343343
/// Represents `#[rustc_skip_during_method_dispatch]`.
344344
SkipDuringMethodDispatch { array: bool, boxed_slice: bool, span: Span },
345345

346+
/// Represents `#[rustc_specialization_trait]`.
347+
SpecializationTrait(Span),
348+
346349
/// Represents `#[stable]`, `#[unstable]` and `#[rustc_allowed_through_unstable_modules]`.
347350
Stability {
348351
stability: Stability,

compiler/rustc_attr_data_structures/src/encode_cross_crate.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ impl AttributeKind {
5555
RustcLayoutScalarValidRangeStart(..) => Yes,
5656
RustcObjectLifetimeDefault => No,
5757
SkipDuringMethodDispatch { .. } => No,
58+
SpecializationTrait(..) => No,
5859
Stability { .. } => Yes,
5960
StdInternalSymbol(..) => No,
6061
TargetFeature(..) => No,

compiler/rustc_attr_parsing/src/attributes/traits.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,10 @@ impl<S: Stage> NoArgsAttributeParser<S> for TypeConstParser {
8989
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
9090
const CREATE: fn(Span) -> AttributeKind = AttributeKind::TypeConst;
9191
}
92+
93+
pub(crate) struct SpecializationTraitParser;
94+
impl<S: Stage> NoArgsAttributeParser<S> for SpecializationTraitParser {
95+
const PATH: &[Symbol] = &[sym::rustc_specialization_trait];
96+
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
97+
const CREATE: fn(Span) -> AttributeKind = AttributeKind::SpecializationTrait;
98+
}

compiler/rustc_attr_parsing/src/context.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ use crate::attributes::stability::{
4545
use crate::attributes::test_attrs::IgnoreParser;
4646
use crate::attributes::traits::{
4747
CoinductiveParser, ConstTraitParser, DenyExplicitImplParser, DoNotImplementViaObjectParser,
48-
SkipDuringMethodDispatchParser, TypeConstParser,
48+
SkipDuringMethodDispatchParser, SpecializationTraitParser, TypeConstParser,
4949
};
5050
use crate::attributes::transparency::TransparencyParser;
5151
use crate::attributes::{AttributeParser as _, Combine, Single, WithoutArgs};
@@ -167,6 +167,7 @@ attribute_parsers!(
167167
Single<WithoutArgs<NonExhaustiveParser>>,
168168
Single<WithoutArgs<PassByValueParser>>,
169169
Single<WithoutArgs<PubTransparentParser>>,
170+
Single<WithoutArgs<SpecializationTraitParser>>,
170171
Single<WithoutArgs<StdInternalSymbolParser>>,
171172
Single<WithoutArgs<TrackCallerParser>>,
172173
Single<WithoutArgs<TypeConstParser>>,

compiler/rustc_hir_analysis/src/collect.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -880,7 +880,7 @@ fn trait_def(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::TraitDef {
880880
let specialization_kind =
881881
if attrs.iter().any(|attr| attr.has_name(sym::rustc_unsafe_specialization_marker)) {
882882
ty::trait_def::TraitSpecializationKind::Marker
883-
} else if attrs.iter().any(|attr| attr.has_name(sym::rustc_specialization_trait)) {
883+
} else if find_attr!(attrs, AttributeKind::SpecializationTrait(_)) {
884884
ty::trait_def::TraitSpecializationKind::AlwaysApplicable
885885
} else {
886886
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
@@ -287,6 +287,7 @@ pub fn check_builtin_meta_item(
287287
| sym::rustc_do_not_implement_via_object
288288
| sym::rustc_coinductive
289289
| sym::const_trait
290+
| sym::rustc_specialization_trait
290291
| sym::type_const
291292
| sym::repr
292293
| sym::align

compiler/rustc_passes/src/check_attr.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
125125
| AttributeKind::Coinductive(attr_span)
126126
| AttributeKind::ConstTrait(attr_span)
127127
| AttributeKind::DenyExplicitImpl(attr_span)
128-
| AttributeKind::DoNotImplementViaObject(attr_span),
128+
| AttributeKind::DoNotImplementViaObject(attr_span)
129+
| AttributeKind::SpecializationTrait(attr_span),
129130
) => {
130131
self.check_must_be_applied_to_trait(*attr_span, span, target);
131132
}

0 commit comments

Comments
 (0)