diff --git a/compiler/rustc_passes/src/check_attr.rs b/compiler/rustc_passes/src/check_attr.rs index 68efbbb74c300..6e4907fe518ae 100644 --- a/compiler/rustc_passes/src/check_attr.rs +++ b/compiler/rustc_passes/src/check_attr.rs @@ -1740,8 +1740,8 @@ impl CheckAttrVisitor<'_> { fn check_used(&self, attrs: &[Attribute], target: Target) { let mut used_linker_span = None; let mut used_compiler_span = None; - for attr in attrs { - if attr.has_name(sym::used) && target != Target::Static { + for attr in attrs.iter().filter(|attr| attr.has_name(sym::used)) { + if target != Target::Static { self.tcx .sess .span_err(attr.span, "attribute must be applied to a `static` variable"); diff --git a/src/test/ui/attributes/used_with_arg_no_mangle.rs b/src/test/ui/attributes/used_with_arg_no_mangle.rs new file mode 100644 index 0000000000000..d0bbe76ef3e57 --- /dev/null +++ b/src/test/ui/attributes/used_with_arg_no_mangle.rs @@ -0,0 +1,9 @@ +// check-pass + +#![feature(used_with_arg)] + +#[used(linker)] +#[no_mangle] // accidentally detected as `used(compiler)` +pub static GLOB: usize = 0; + +fn main() {}