rust/compiler
Matthias Krüger e7504ac704
Rollup merge of #128934 - Nadrieril:fix-empty-non-exhaustive, r=compiler-errors
Non-exhaustive structs may be empty

This is a follow-up to a discrepancy noticed in https://github.com/rust-lang/rust/pull/122792: today, the following struct is considered inhabited (non-empty) outside its defining crate:
```rust
#[non_exhaustive]
pub struct UninhabitedStruct {
    pub never: !,
    // other fields
}
```

`#[non_exhaustive]` on a struct should mean that adding fields to it isn't a breaking change. There is no way that adding fields to this struct could make it non-empty since the `never` field must stay and is inconstructible. I suspect this was implemented this way due to confusion with `#[non_exhaustive]` enums, which indeed should be considered non-empty outside their defining crate.

I propose that we consider such a struct uninhabited (empty), just like it would be without the `#[non_exhaustive]` annotation.

Code that doesn't pass today and will pass after this:
```rust
// In a different crate
fn empty_match_on_empty_struct<T>(x: UninhabitedStruct) -> T {
    match x {}
}
```

This is not a breaking change.

r? ``@compiler-errors``
2024-09-03 19:13:24 +02:00
..
rustc
rustc_abi ABI compat check: detect unadjusted ABI mismatches 2024-08-27 09:04:59 +02:00
rustc_arena compiler: Remove feature(new_uninit) 2024-08-27 10:17:05 -07:00
rustc_ast Create opaque definitions in resolver. 2024-08-31 20:14:43 +00:00
rustc_ast_ir Add warn(unreachable_pub) to several crates. 2024-08-16 08:46:13 +10:00
rustc_ast_lowering chore: Fix typos in 'compiler' (batch 1) 2024-09-02 07:42:38 +02:00
rustc_ast_passes Create opaque definitions in resolver. 2024-08-31 20:14:43 +00:00
rustc_ast_pretty Add warn(unreachable_pub) to rustc_ast_pretty. 2024-08-16 08:46:46 +10:00
rustc_attr Rollup merge of #126013 - nnethercote:unreachable_pub, r=Urgau 2024-08-27 00:41:57 +02:00
rustc_baked_icu_data Don't add warn(unreachable_pub) to rustc_baked_icu. 2024-08-16 08:46:52 +10:00
rustc_borrowck chore: Fix typos in 'compiler' (batch 1) 2024-09-02 07:42:38 +02:00
rustc_builtin_macros Rollup merge of #123940 - kornelski:remove-derived-debug, r=Urgau 2024-08-29 16:21:46 +02:00
rustc_codegen_cranelift introduce PrettyPrintMirOptions for cosmetic MIR dump options 2024-08-30 07:07:28 +00:00
rustc_codegen_gcc Rollup merge of #128731 - RalfJung:simd-shuffle-vector, r=workingjubilee 2024-08-27 01:46:50 -05:00
rustc_codegen_llvm chore: Fix typos in 'compiler' (batch 1) 2024-09-02 07:42:38 +02:00
rustc_codegen_ssa Rollup merge of #129875 - Sajjon:sajjon_fix_typos_batch_1, r=compiler-errors,jieyouxu 2024-09-02 22:35:20 +02:00
rustc_const_eval Auto merge of #129777 - nnethercote:unreachable_pub-4, r=Urgau 2024-09-03 01:27:20 +00:00
rustc_data_structures chore: Fix typos in 'compiler' (batch 1) 2024-09-02 07:42:38 +02:00
rustc_driver
rustc_driver_impl Rollup merge of #129667 - dev-ardi:rustc_driver-cleanup, r=michaelwoerister 2024-08-28 17:12:19 +02:00
rustc_error_codes chore: Fix typos in 'compiler' (batch 1) 2024-09-02 07:42:38 +02:00
rustc_error_messages Add warn(unreachable_pub) to rustc_error_messages. 2024-08-27 11:52:08 +10:00
rustc_errors Rollup merge of #129875 - Sajjon:sajjon_fix_typos_batch_1, r=compiler-errors,jieyouxu 2024-09-02 22:35:20 +02:00
rustc_expand Add warn(unreachable_pub) to rustc_expand. 2024-08-27 12:40:38 +10:00
rustc_feature Rollup merge of #129875 - Sajjon:sajjon_fix_typos_batch_1, r=compiler-errors,jieyouxu 2024-09-02 22:35:20 +02:00
rustc_fluent_macro Add warn(unreachable_pub) to rustc_fluent_macro. 2024-08-27 12:56:54 +10:00
rustc_fs_util
rustc_graphviz Add warn(unreachable_pub) to rustc_graphviz. 2024-08-27 12:58:29 +10:00
rustc_hir Revert "Auto merge of #127537 - veluca93:struct_tf, r=BoxyUwU" 2024-09-01 16:35:53 +02:00
rustc_hir_analysis Rollup merge of #127692 - veera-sivarajan:bugfix-125139, r=estebank 2024-09-03 19:13:23 +02:00
rustc_hir_pretty Add warn(unreachable_pub) to rustc_hir_pretty. 2024-08-27 13:25:40 +10:00
rustc_hir_typeck Rollup merge of #129875 - Sajjon:sajjon_fix_typos_batch_1, r=compiler-errors,jieyouxu 2024-09-02 22:35:20 +02:00
rustc_incremental Add warn(unreachable_pub) to rustc_incremental. 2024-08-27 14:30:20 +10:00
rustc_index Rollup merge of #129401 - workingjubilee:partial-initialization-of-stabilization, r=dtolnay,joboet 2024-08-28 19:12:52 -07:00
rustc_index_macros
rustc_infer chore: Fix typos in 'compiler' (batch 1) 2024-09-02 07:42:38 +02:00
rustc_interface chore: Fix typos in 'compiler' (batch 1) 2024-09-02 07:42:38 +02:00
rustc_lexer Add warn(unreachable_pub) to rustc_lexer. 2024-08-27 15:12:46 +10:00
rustc_lint Rollup merge of #129877 - Sajjon:sajjon_fix_typos_batch_2, r=fee1-dead 2024-09-02 22:35:21 +02:00
rustc_lint_defs Auto merge of #127313 - cjgillot:single-expect, r=jieyouxu 2024-09-01 15:50:48 +00:00
rustc_llvm Rollup merge of #129749 - krasimirgg:llvm-20-lto, r=nikic 2024-08-31 14:46:09 +02:00
rustc_log
rustc_macros Add warn(unreachable_pub) to rustc_metadata. 2024-08-29 20:13:06 +10:00
rustc_metadata Rollup merge of #129829 - compiler-errors:decode-non-optional, r=lcnr 2024-09-02 22:35:19 +02:00
rustc_middle Rollup merge of #128934 - Nadrieril:fix-empty-non-exhaustive, r=compiler-errors 2024-09-03 19:13:24 +02:00
rustc_mir_build Revert "Auto merge of #127537 - veluca93:struct_tf, r=BoxyUwU" 2024-09-01 16:35:53 +02:00
rustc_mir_dataflow Add warn(unreachable_pub) to rustc_mir_dataflow. 2024-08-29 20:13:06 +10:00
rustc_mir_transform Rollup merge of #129877 - Sajjon:sajjon_fix_typos_batch_2, r=fee1-dead 2024-09-02 22:35:21 +02:00
rustc_monomorphize chore: Fix typos in 'compiler' (batch 2) 2024-09-02 07:50:22 +02:00
rustc_next_trait_solver Rollup merge of #129877 - Sajjon:sajjon_fix_typos_batch_2, r=fee1-dead 2024-09-02 22:35:21 +02:00
rustc_parse chore: Fix typos in 'compiler' (batch 2) 2024-09-02 07:50:22 +02:00
rustc_parse_format Add warn(unreachable_pub) to rustc_parse_format. 2024-08-29 20:13:06 +10:00
rustc_passes Rollup merge of #128701 - veera-sivarajan:fix-128604, r=estebank 2024-09-03 19:13:23 +02:00
rustc_pattern_analysis Rollup merge of #128934 - Nadrieril:fix-empty-non-exhaustive, r=compiler-errors 2024-09-03 19:13:24 +02:00
rustc_privacy Add warn(unreachable_pub) to rustc_privacy. 2024-08-29 20:18:44 +10:00
rustc_query_impl Add warn(unreachable_pub) to rustc_query_impl. 2024-08-29 20:18:44 +10:00
rustc_query_system chore: Fix typos in 'compiler' (batch 2) 2024-09-02 07:50:22 +02:00
rustc_resolve Rollup merge of #129877 - Sajjon:sajjon_fix_typos_batch_2, r=fee1-dead 2024-09-02 22:35:21 +02:00
rustc_sanitizers Auto merge of #129777 - nnethercote:unreachable_pub-4, r=Urgau 2024-09-03 01:27:20 +00:00
rustc_serialize Auto merge of #129777 - nnethercote:unreachable_pub-4, r=Urgau 2024-09-03 01:27:20 +00:00
rustc_session Auto merge of #129777 - nnethercote:unreachable_pub-4, r=Urgau 2024-09-03 01:27:20 +00:00
rustc_smir Auto merge of #129777 - nnethercote:unreachable_pub-4, r=Urgau 2024-09-03 01:27:20 +00:00
rustc_span Auto merge of #129777 - nnethercote:unreachable_pub-4, r=Urgau 2024-09-03 01:27:20 +00:00
rustc_symbol_mangling Auto merge of #129777 - nnethercote:unreachable_pub-4, r=Urgau 2024-09-03 01:27:20 +00:00
rustc_target Auto merge of #129777 - nnethercote:unreachable_pub-4, r=Urgau 2024-09-03 01:27:20 +00:00
rustc_trait_selection Rollup merge of #127692 - veera-sivarajan:bugfix-125139, r=estebank 2024-09-03 19:13:23 +02:00
rustc_traits Add warn(unreachable_pub) to rustc_traits. 2024-09-03 08:49:54 +10:00
rustc_transmute Auto merge of #129777 - nnethercote:unreachable_pub-4, r=Urgau 2024-09-03 01:27:20 +00:00
rustc_ty_utils Add warn(unreachable_pub) to rustc_ty_utils. 2024-09-03 08:50:33 +10:00
rustc_type_ir Auto merge of #129777 - nnethercote:unreachable_pub-4, r=Urgau 2024-09-03 01:27:20 +00:00
rustc_type_ir_macros
stable_mir chore: Fix typos in 'compiler' (batch 3) 2024-09-02 07:33:41 +02:00