diff options
Diffstat (limited to 'compiler/rustc_passes')
| -rw-r--r-- | compiler/rustc_passes/src/check_attr.rs | 13 | ||||
| -rw-r--r-- | compiler/rustc_passes/src/errors.rs | 7 |
2 files changed, 20 insertions, 0 deletions
diff --git a/compiler/rustc_passes/src/check_attr.rs b/compiler/rustc_passes/src/check_attr.rs index fde12b9eee6..bbf6c72ef36 100644 --- a/compiler/rustc_passes/src/check_attr.rs +++ b/compiler/rustc_passes/src/check_attr.rs @@ -146,6 +146,9 @@ impl CheckAttrVisitor<'_> { | sym::stable | sym::rustc_allowed_through_unstable_modules | sym::rustc_promotable => self.check_stability_promotable(&attr, span, target), + sym::link_ordinal => { + self.check_link_ordinal(&attr, span, target) + }, _ => true, }; is_valid &= attr_is_valid; @@ -1861,6 +1864,16 @@ impl CheckAttrVisitor<'_> { } } + fn check_link_ordinal(&self, attr: &Attribute, _span: Span, target: Target) -> bool { + match target { + Target::ForeignFn => true, + _ => { + self.tcx.sess.emit_err(errors::LinkOrdinal { attr_span: attr.span }); + false + } + } + } + fn check_deprecated(&self, hir_id: HirId, attr: &Attribute, _span: Span, target: Target) { match target { Target::Closure | Target::Expression | Target::Statement | Target::Arm => { diff --git a/compiler/rustc_passes/src/errors.rs b/compiler/rustc_passes/src/errors.rs index 5feb0e2956b..6cb53ab3284 100644 --- a/compiler/rustc_passes/src/errors.rs +++ b/compiler/rustc_passes/src/errors.rs @@ -552,6 +552,13 @@ pub struct ConstTrait { } #[derive(SessionDiagnostic)] +#[error(passes::link_ordinal)] +pub struct LinkOrdinal { + #[primary_span] + pub attr_span: Span +} + +#[derive(SessionDiagnostic)] #[error(passes::stability_promotable)] pub struct StabilityPromotable { #[primary_span] |
