Skip to content

Commit fdf219d

Browse files
committed
Auto merge of #26663 - Eljay:fix-repr-attribute, r=sanxiyn
Fixes #26646. Loops over all `#[repr(..)]` attributes instead of stopping at the first one to make sure they are all marked as used. Previously it stopped after the first `#[repr(C)]` was found causing all other attributes to be skipped by the linter.
2 parents 7fc0675 + e8fe55f commit fdf219d

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/librustc_lint/builtin.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -821,10 +821,12 @@ impl LintPass for NonCamelCaseTypes {
821821
}
822822

823823
fn check_item(&mut self, cx: &Context, it: &ast::Item) {
824-
let has_extern_repr = it.attrs.iter().any(|attr| {
824+
let extern_repr_count = it.attrs.iter().filter(|attr| {
825825
attr::find_repr_attrs(cx.tcx.sess.diagnostic(), attr).iter()
826826
.any(|r| r == &attr::ReprExtern)
827-
});
827+
}).count();
828+
let has_extern_repr = extern_repr_count > 0;
829+
828830
if has_extern_repr {
829831
return;
830832
}

src/test/run-pass/issue-26646.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#![deny(unused_attributes)]
12+
13+
#[repr(C)]
14+
#[repr(packed)]
15+
pub struct Foo;
16+
17+
#[repr(packed)]
18+
#[repr(C)]
19+
pub struct Bar;
20+
21+
fn main() { }

0 commit comments

Comments
 (0)