Skip to content

Commit 2629a92

Browse files
committed
Port #[rustc_paren_sugar] to the new attribute system
1 parent 34e0dfd commit 2629a92

File tree

6 files changed

+22
-6
lines changed

6 files changed

+22
-6
lines changed

compiler/rustc_attr_data_structures/src/attributes.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,9 @@ pub enum AttributeKind {
280280
/// Represents `#[optimize(size|speed)]`
281281
Optimize(OptimizeAttr, Span),
282282

283+
/// Represents `#[rustc_paren_sugar]`.
284+
ParenSugar(Span),
285+
283286
/// Represents `#[rustc_pass_by_value]` (used by the `rustc_pass_by_value` lint).
284287
PassByValue(Span),
285288

compiler/rustc_attr_parsing/src/attributes/traits.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,19 @@ impl<S: Stage> NoArgsAttributeParser<S> for MarkerParser {
138138
pub(crate) struct FundamentalParser;
139139
impl<S: Stage> NoArgsAttributeParser<S> for FundamentalParser {
140140
const PATH: &[Symbol] = &[sym::fundamental];
141-
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
141+
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
142142

143143
fn create(_: Span) -> AttributeKind {
144144
AttributeKind::Fundamental
145145
}
146146
}
147+
148+
pub(crate) struct ParenSugarParser;
149+
impl<S: Stage> NoArgsAttributeParser<S> for ParenSugarParser {
150+
const PATH: &[Symbol] = &[sym::rustc_paren_sugar];
151+
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
152+
153+
fn create(span: Span) -> AttributeKind {
154+
AttributeKind::ParenSugar(span)
155+
}
156+
}

compiler/rustc_attr_parsing/src/context.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ use crate::attributes::stability::{
2929
};
3030
use crate::attributes::traits::{
3131
CoinductiveParser, ConstTraitParser, DenyExplicitImplParser, DoNotImplementViaObjectParser,
32-
FundamentalParser, MarkerParser, SkipDuringMethodDispatchParser, SpecializationTraitParser,
33-
TypeConstParser, UnsafeSpecializationMarkerParser,
32+
FundamentalParser, MarkerParser, ParenSugarParser, SkipDuringMethodDispatchParser,
33+
SpecializationTraitParser, TypeConstParser, UnsafeSpecializationMarkerParser,
3434
};
3535
use crate::attributes::transparency::TransparencyParser;
3636
use crate::attributes::{AttributeParser as _, Combine, Single, WithoutArgs};
@@ -137,6 +137,7 @@ attribute_parsers!(
137137
Single<WithoutArgs<MarkerParser>>,
138138
Single<WithoutArgs<MayDangleParser>>,
139139
Single<WithoutArgs<NoMangleParser>>,
140+
Single<WithoutArgs<ParenSugarParser>>,
140141
Single<WithoutArgs<PassByValueParser>>,
141142
Single<WithoutArgs<PubTransparentParser>>,
142143
Single<WithoutArgs<SpecializationTraitParser>>,

compiler/rustc_hir_analysis/src/collect.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1142,7 +1142,7 @@ fn trait_def(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::TraitDef {
11421142
hir::Constness::NotConst
11431143
};
11441144

1145-
let paren_sugar = attrs.iter().any(|attr| attr.has_name(sym::rustc_paren_sugar));
1145+
let paren_sugar = find_attr!(attrs, AttributeKind::ParenSugar(_));
11461146
if paren_sugar && !tcx.features().unboxed_closures() {
11471147
tcx.dcx().emit_err(errors::ParenSugarAttribute { span: item.span });
11481148
}

compiler/rustc_parse/src/validate_attr.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ fn emit_malformed_attribute(
304304
| sym::rustc_unsafe_specialization_marker
305305
| sym::marker
306306
| sym::fundamental
307+
| sym::rustc_paren_sugar
307308
| sym::type_const
308309
| sym::rustc_pass_by_value
309310
| sym::repr

compiler/rustc_passes/src/check_attr.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,10 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
129129
}
130130
&Attribute::Parsed(
131131
AttributeKind::SpecializationTrait(attr_span)
132-
| AttributeKind::UnsafeSpecializationMarker(attr_span),
132+
| AttributeKind::UnsafeSpecializationMarker(attr_span)
133+
| AttributeKind::ParenSugar(attr_span),
133134
) => {
134-
// FIXME(specialization): more validation is needed
135+
// FIXME: more validation is needed
135136
self.check_must_be_applied_to_trait(attr_span, span, target);
136137
}
137138
&Attribute::Parsed(AttributeKind::TypeConst(attr_span)) => {

0 commit comments

Comments
 (0)