Fix double error for #[no_mangle] on consts
This commit is contained in:
parent
730221e654
commit
c050bfbf6f
5 changed files with 22 additions and 3 deletions
|
|
@ -6,6 +6,7 @@ use crate::session_diagnostics::{
|
|||
NakedFunctionIncompatibleAttribute, NullOnExport, NullOnObjcClass, NullOnObjcSelector,
|
||||
ObjcClassExpectedStringLiteral, ObjcSelectorExpectedStringLiteral,
|
||||
};
|
||||
use crate::target_checking::Policy::AllowSilent;
|
||||
|
||||
pub(crate) struct OptimizeParser;
|
||||
|
||||
|
|
@ -362,6 +363,7 @@ impl<S: Stage> NoArgsAttributeParser<S> for NoMangleParser {
|
|||
Allow(Target::Static),
|
||||
Allow(Target::Method(MethodKind::Inherent)),
|
||||
Allow(Target::Method(MethodKind::TraitImpl)),
|
||||
AllowSilent(Target::Const), // Handled in the `InvalidNoMangleItems` pass
|
||||
Error(Target::Closure),
|
||||
]);
|
||||
const CREATE: fn(Span) -> AttributeKind = AttributeKind::NoMangle;
|
||||
|
|
|
|||
|
|
@ -31,7 +31,9 @@ impl AllowedTargets {
|
|||
pub(crate) fn is_allowed(&self, target: Target) -> AllowedResult {
|
||||
match self {
|
||||
AllowedTargets::AllowList(list) => {
|
||||
if list.contains(&Policy::Allow(target)) {
|
||||
if list.contains(&Policy::Allow(target))
|
||||
|| list.contains(&Policy::AllowSilent(target))
|
||||
{
|
||||
AllowedResult::Allowed
|
||||
} else if list.contains(&Policy::Warn(target)) {
|
||||
AllowedResult::Warn
|
||||
|
|
@ -40,7 +42,9 @@ impl AllowedTargets {
|
|||
}
|
||||
}
|
||||
AllowedTargets::AllowListWarnRest(list) => {
|
||||
if list.contains(&Policy::Allow(target)) {
|
||||
if list.contains(&Policy::Allow(target))
|
||||
|| list.contains(&Policy::AllowSilent(target))
|
||||
{
|
||||
AllowedResult::Allowed
|
||||
} else if list.contains(&Policy::Error(target)) {
|
||||
AllowedResult::Error
|
||||
|
|
@ -61,6 +65,7 @@ impl AllowedTargets {
|
|||
.iter()
|
||||
.filter_map(|target| match target {
|
||||
Policy::Allow(target) => Some(*target),
|
||||
Policy::AllowSilent(_) => None, // Not listed in possible targets
|
||||
Policy::Warn(_) => None,
|
||||
Policy::Error(_) => None,
|
||||
})
|
||||
|
|
@ -68,10 +73,18 @@ impl AllowedTargets {
|
|||
}
|
||||
}
|
||||
|
||||
/// This policy determines what diagnostics should be emitted based on the `Target` of the attribute.
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub(crate) enum Policy {
|
||||
/// A target that is allowed.
|
||||
Allow(Target),
|
||||
/// A target that is allowed and not listed in the possible targets.
|
||||
/// This is useful if the target is checked elsewhere.
|
||||
AllowSilent(Target),
|
||||
/// Emits a FCW on this target.
|
||||
/// This is useful if the target was previously allowed but should not be.
|
||||
Warn(Target),
|
||||
/// Emits an error on this target.
|
||||
Error(Target),
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
//@ run-rustfix
|
||||
|
||||
#![deny(unused_attributes)]
|
||||
|
||||
#[no_mangle] pub static RAH: usize = 5;
|
||||
//~^ ERROR const items should never be `#[no_mangle]`
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
//@ run-rustfix
|
||||
|
||||
#![deny(unused_attributes)]
|
||||
|
||||
#[no_mangle] pub const RAH: usize = 5;
|
||||
//~^ ERROR const items should never be `#[no_mangle]`
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error: const items should never be `#[no_mangle]`
|
||||
--> $DIR/issue-45562.rs:3:14
|
||||
--> $DIR/issue-45562.rs:5:14
|
||||
|
|
||||
LL | #[no_mangle] pub const RAH: usize = 5;
|
||||
| ---------^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue