mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-01 19:23:50 +00:00
Rollup merge of #68586 - Centril:repr-deny, r=pnkfelix
Make conflicting_repr_hints a deny-by-default c-future-compat lint Closes https://github.com/rust-lang/rust/issues/68428. cc https://github.com/rust-lang/rust/issues/68585. r? @petrochenkov @pnkfelix
This commit is contained in:
commit
8f1857a822
@ -14,7 +14,7 @@ use rustc_hir::def_id::DefId;
|
||||
use rustc_hir::intravisit::{self, NestedVisitorMap, Visitor};
|
||||
use rustc_hir::DUMMY_HIR_ID;
|
||||
use rustc_hir::{self, HirId, Item, ItemKind, TraitItem, TraitItemKind};
|
||||
use rustc_session::lint::builtin::UNUSED_ATTRIBUTES;
|
||||
use rustc_session::lint::builtin::{CONFLICTING_REPR_HINTS, UNUSED_ATTRIBUTES};
|
||||
use rustc_span::symbol::sym;
|
||||
use rustc_span::Span;
|
||||
use syntax::ast::Attribute;
|
||||
@ -196,7 +196,7 @@ impl CheckAttrVisitor<'tcx> {
|
||||
self.tcx.codegen_fn_attrs(self.tcx.hir().local_def_id(hir_id));
|
||||
}
|
||||
|
||||
self.check_repr(attrs, span, target, item);
|
||||
self.check_repr(attrs, span, target, item, hir_id);
|
||||
self.check_used(attrs, target);
|
||||
}
|
||||
|
||||
@ -357,6 +357,7 @@ impl CheckAttrVisitor<'tcx> {
|
||||
span: &Span,
|
||||
target: Target,
|
||||
item: Option<&Item<'_>>,
|
||||
hir_id: HirId,
|
||||
) {
|
||||
// Extract the names of all repr hints, e.g., [foo, bar, align] for:
|
||||
// ```
|
||||
@ -446,12 +447,14 @@ impl CheckAttrVisitor<'tcx> {
|
||||
|| (is_simd && is_c)
|
||||
|| (int_reprs == 1 && is_c && item.map_or(false, |item| is_c_like_enum(item)))
|
||||
{
|
||||
struct_span_err!(
|
||||
self.tcx.sess,
|
||||
self.tcx
|
||||
.struct_span_lint_hir(
|
||||
CONFLICTING_REPR_HINTS,
|
||||
hir_id,
|
||||
hint_spans.collect::<Vec<Span>>(),
|
||||
E0566,
|
||||
"conflicting representation hints",
|
||||
)
|
||||
.code(rustc_errors::error_code!(E0566))
|
||||
.emit();
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,16 @@ declare_lint! {
|
||||
};
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
pub CONFLICTING_REPR_HINTS,
|
||||
Deny,
|
||||
"conflicts between `#[repr(..)]` hints that were previously accepted and used in practice",
|
||||
@future_incompatible = FutureIncompatibleInfo {
|
||||
reference: "issue #68585 <https://github.com/rust-lang/rust/issues/68585>",
|
||||
edition: None,
|
||||
};
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
pub META_VARIABLE_MISUSE,
|
||||
Allow,
|
||||
@ -520,6 +530,7 @@ declare_lint_pass! {
|
||||
MACRO_USE_EXTERN_CRATE,
|
||||
MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS,
|
||||
ILL_FORMED_ATTRIBUTE_INPUT,
|
||||
CONFLICTING_REPR_HINTS,
|
||||
META_VARIABLE_MISUSE,
|
||||
DEPRECATED_IN_FUTURE,
|
||||
AMBIGUOUS_ASSOCIATED_ITEMS,
|
||||
|
@ -11,11 +11,13 @@ enum B {
|
||||
}
|
||||
|
||||
#[repr(C, u64)] //~ ERROR conflicting representation hints
|
||||
//~^ WARN this was previously accepted
|
||||
enum C {
|
||||
C,
|
||||
}
|
||||
|
||||
#[repr(u32, u64)] //~ ERROR conflicting representation hints
|
||||
//~^ WARN this was previously accepted
|
||||
enum D {
|
||||
D,
|
||||
}
|
||||
|
@ -3,45 +3,52 @@ error[E0566]: conflicting representation hints
|
||||
|
|
||||
LL | #[repr(C, u64)]
|
||||
| ^ ^^^
|
||||
|
|
||||
= note: `#[deny(conflicting_repr_hints)]` on by default
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #68585 <https://github.com/rust-lang/rust/issues/68585>
|
||||
|
||||
error[E0566]: conflicting representation hints
|
||||
--> $DIR/conflicting-repr-hints.rs:18:8
|
||||
--> $DIR/conflicting-repr-hints.rs:19:8
|
||||
|
|
||||
LL | #[repr(u32, u64)]
|
||||
| ^^^ ^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #68585 <https://github.com/rust-lang/rust/issues/68585>
|
||||
|
||||
error[E0587]: type has conflicting packed and align representation hints
|
||||
--> $DIR/conflicting-repr-hints.rs:27:1
|
||||
--> $DIR/conflicting-repr-hints.rs:29:1
|
||||
|
|
||||
LL | struct F(i32);
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error[E0587]: type has conflicting packed and align representation hints
|
||||
--> $DIR/conflicting-repr-hints.rs:31:1
|
||||
--> $DIR/conflicting-repr-hints.rs:33:1
|
||||
|
|
||||
LL | struct G(i32);
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error[E0587]: type has conflicting packed and align representation hints
|
||||
--> $DIR/conflicting-repr-hints.rs:35:1
|
||||
--> $DIR/conflicting-repr-hints.rs:37:1
|
||||
|
|
||||
LL | struct H(i32);
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error[E0634]: type has conflicting packed representation hints
|
||||
--> $DIR/conflicting-repr-hints.rs:38:1
|
||||
--> $DIR/conflicting-repr-hints.rs:40:1
|
||||
|
|
||||
LL | struct I(i32);
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error[E0634]: type has conflicting packed representation hints
|
||||
--> $DIR/conflicting-repr-hints.rs:42:1
|
||||
--> $DIR/conflicting-repr-hints.rs:44:1
|
||||
|
|
||||
LL | struct J(i32);
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error[E0587]: type has conflicting packed and align representation hints
|
||||
--> $DIR/conflicting-repr-hints.rs:48:1
|
||||
--> $DIR/conflicting-repr-hints.rs:50:1
|
||||
|
|
||||
LL | / union X {
|
||||
LL | |
|
||||
@ -50,7 +57,7 @@ LL | | }
|
||||
| |_^
|
||||
|
||||
error[E0587]: type has conflicting packed and align representation hints
|
||||
--> $DIR/conflicting-repr-hints.rs:55:1
|
||||
--> $DIR/conflicting-repr-hints.rs:57:1
|
||||
|
|
||||
LL | / union Y {
|
||||
LL | |
|
||||
@ -59,7 +66,7 @@ LL | | }
|
||||
| |_^
|
||||
|
||||
error[E0587]: type has conflicting packed and align representation hints
|
||||
--> $DIR/conflicting-repr-hints.rs:62:1
|
||||
--> $DIR/conflicting-repr-hints.rs:64:1
|
||||
|
|
||||
LL | / union Z {
|
||||
LL | |
|
||||
|
@ -2,6 +2,7 @@
|
||||
struct Foo(u64, u64);
|
||||
|
||||
#[repr(C)] //~ ERROR conflicting representation hints
|
||||
//~^ WARN this was previously accepted
|
||||
#[repr(simd)] //~ error: SIMD types are experimental
|
||||
struct Bar(u64, u64);
|
||||
|
||||
|
@ -8,7 +8,7 @@ LL | #[repr(simd)]
|
||||
= help: add `#![feature(repr_simd)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: SIMD types are experimental and possibly buggy
|
||||
--> $DIR/feature-gate-repr-simd.rs:5:1
|
||||
--> $DIR/feature-gate-repr-simd.rs:6:1
|
||||
|
|
||||
LL | #[repr(simd)]
|
||||
| ^^^^^^^^^^^^^
|
||||
@ -21,8 +21,13 @@ error[E0566]: conflicting representation hints
|
||||
|
|
||||
LL | #[repr(C)]
|
||||
| ^
|
||||
LL |
|
||||
LL | #[repr(simd)]
|
||||
| ^^^^
|
||||
|
|
||||
= note: `#[deny(conflicting_repr_hints)]` on by default
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #68585 <https://github.com/rust-lang/rust/issues/68585>
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -1,10 +1,12 @@
|
||||
#[repr(C, u8)] //~ ERROR conflicting representation hints
|
||||
//~^ WARN this was previously accepted
|
||||
enum Foo {
|
||||
A,
|
||||
B,
|
||||
}
|
||||
|
||||
#[repr(C)] //~ ERROR conflicting representation hints
|
||||
//~^ WARN this was previously accepted
|
||||
#[repr(u8)]
|
||||
enum Bar {
|
||||
A,
|
||||
|
@ -3,14 +3,22 @@ error[E0566]: conflicting representation hints
|
||||
|
|
||||
LL | #[repr(C, u8)]
|
||||
| ^ ^^
|
||||
|
|
||||
= note: `#[deny(conflicting_repr_hints)]` on by default
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #68585 <https://github.com/rust-lang/rust/issues/68585>
|
||||
|
||||
error[E0566]: conflicting representation hints
|
||||
--> $DIR/issue-47094.rs:7:8
|
||||
--> $DIR/issue-47094.rs:8:8
|
||||
|
|
||||
LL | #[repr(C)]
|
||||
| ^
|
||||
LL |
|
||||
LL | #[repr(u8)]
|
||||
| ^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #68585 <https://github.com/rust-lang/rust/issues/68585>
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user