Rollup merge of #129422 - compiler-errors:repr-rust, r=fmease
Gate `repr(Rust)` correctly on non-ADT items #114201 added `repr(Rust)` but didn't add any attribute validation to it like `repr(C)` has, to only allow it on ADT items. I consider this code to be nonsense, for example: ``` #[repr(Rust)] fn foo() {} ``` Reminder that it's different from `extern "Rust"`, which *is* valid on function items. But also this now disallows `repr(Rust)` on modules, impls, traits, etc. I'll crater it, if it looks bad then I'll add an FCW. --- https://github.com/rust-lang/rust/labels/relnotes: Compatibility (minor breaking change).
This commit is contained in:
commit
2eb65a6667
3 changed files with 73 additions and 1 deletions
|
@ -1779,6 +1779,15 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
|
|||
match hint.name_or_empty() {
|
||||
sym::Rust => {
|
||||
is_explicit_rust = true;
|
||||
match target {
|
||||
Target::Struct | Target::Union | Target::Enum => continue,
|
||||
_ => {
|
||||
self.dcx().emit_err(errors::AttrApplication::StructEnumUnion {
|
||||
hint_span: hint.span(),
|
||||
span,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
sym::C => {
|
||||
is_c = true;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue