1
Fork 0

Auto merge of #100091 - chenyukang:add-check-for-link-ordinal, r=michaelwoerister

Check link ordinal to make sure it is targetted  for foreign function

Fix #100009, when link ordinal is not target for foreign functions, emit an error.

cc `@dpaoliello`
This commit is contained in:
bors 2022-08-07 05:37:29 +00:00
commit 5651759746
5 changed files with 75 additions and 0 deletions

View file

@ -146,6 +146,7 @@ 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;
@ -1893,6 +1894,16 @@ impl CheckAttrVisitor<'_> {
}
}
fn check_link_ordinal(&self, attr: &Attribute, _span: Span, target: Target) -> bool {
match target {
Target::ForeignFn | Target::ForeignStatic => 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 => {

View file

@ -551,6 +551,13 @@ pub struct ConstTrait {
pub attr_span: Span,
}
#[derive(SessionDiagnostic)]
#[error(passes::link_ordinal)]
pub struct LinkOrdinal {
#[primary_span]
pub attr_span: Span,
}
#[derive(SessionDiagnostic)]
#[error(passes::stability_promotable)]
pub struct StabilityPromotable {