rust/compiler
Jacob Pratt 4ea261018a
Rollup merge of #136660 - compiler-errors:BikeshedGuaranteedNoDrop, r=lcnr
Use a trait to enforce field validity for union fields + `unsafe` fields + `unsafe<>` binder types

This PR introduces a new, internal-only trait called `BikeshedGuaranteedNoDrop`[^1] to faithfully model the field check that used to be implemented manually by `allowed_union_or_unsafe_field`.

942db6782f/compiler/rustc_hir_analysis/src/check/check.rs (L84-L115)

Copying over the doc comment from the trait:

```rust
/// Marker trait for the types that are allowed in union fields, unsafe fields,
/// and unsafe binder types.
///
/// Implemented for:
/// * `&T`, `&mut T` for all `T`,
/// * `ManuallyDrop<T>` for all `T`,
/// * tuples and arrays whose elements implement `BikeshedGuaranteedNoDrop`,
/// * or otherwise, all types that are `Copy`.
///
/// Notably, this doesn't include all trivially-destructible types for semver
/// reasons.
///
/// Bikeshed name for now.
```

As far as I am aware, there's no new behavior being guaranteed by this trait, since it operates the same as the manually implemented check. We could easily rip out this trait and go back to using the manually implemented check for union fields, however using a trait means that this code can be shared by WF for `unsafe<>` binders too. See the last commit.

The only diagnostic changes are that this now fires false-negatives for fields that are ill-formed. I don't consider that to be much of a problem though.

r? oli-obk

[^1]: Please let's not bikeshed this name lol. There's no good name for `ValidForUnsafeFieldsUnsafeBindersAndUnionFields`.
2025-02-13 03:53:30 -05:00
..
rustc
rustc_abi compiler: remove rustc_abi::lookup and AbiUnsupported 2025-02-11 20:18:01 -08:00
rustc_arena Add inherent versions of MaybeUninit methods for slices 2025-01-11 23:57:00 -05:00
rustc_ast Add a TyPat in the AST to reuse the generic arg lowering logic 2025-02-11 08:51:05 +00:00
rustc_ast_ir
rustc_ast_lowering Rollup merge of #136901 - workingjubilee:stabilize-externabi-hashing-forever, r=compiler-errors 2025-02-12 20:30:55 +01:00
rustc_ast_passes compiler: remove rustc_target reexport of rustc_abi::HashStableContext 2025-02-11 18:55:48 -08:00
rustc_ast_pretty Add a TyPat in the AST to reuse the generic arg lowering logic 2025-02-11 08:51:05 +00:00
rustc_attr_data_structures rustc_allowed_through_unstable_modules: require deprecation message 2025-02-02 12:36:12 +01:00
rustc_attr_parsing Rustfmt 2025-02-08 22:12:13 +00:00
rustc_baked_icu_data
rustc_borrowck Rollup merge of #136559 - compiler-errors:resolve-regions-for-type-test-failure, r=BoxyUwU 2025-02-13 03:53:29 -05:00
rustc_builtin_macros Rollup merge of #136646 - oli-obk:pattern-types-ast, r=BoxyUwU 2025-02-12 06:07:37 +01:00
rustc_codegen_cranelift Rollup merge of #136660 - compiler-errors:BikeshedGuaranteedNoDrop, r=lcnr 2025-02-13 03:53:30 -05:00
rustc_codegen_gcc Implement and use BikeshedGuaranteedNoDrop for union/unsafe field validity 2025-02-13 03:45:04 +00:00
rustc_codegen_llvm Rollup merge of #136807 - workingjubilee:merge-gpus-to-get-the-arcradeongeforce, r=bjorn3 2025-02-12 20:10:00 -05:00
rustc_codegen_ssa Auto merge of #136954 - jhpratt:rollup-koefsot, r=jhpratt 2025-02-13 02:13:24 +00:00
rustc_const_eval Auto merge of #135994 - 1c3t3a:rename-unsafe-ptr, r=oli-obk 2025-02-12 23:18:14 +00:00
rustc_data_structures Rustfmt 2025-02-08 22:12:13 +00:00
rustc_driver
rustc_driver_impl compiler: compare and hash ExternAbi like its string 2025-02-11 20:18:01 -08:00
rustc_error_codes fix the error code document 2025-02-10 04:36:49 +08:00
rustc_error_messages tree-wide: parallel: Fully removed all Lrc, replaced with Arc 2025-02-03 13:25:57 +03:00
rustc_errors compiler: replace ExternAbi::name calls with formatters 2025-02-11 19:42:47 -08:00
rustc_expand Rollup merge of #136107 - dingxiangfei2009:coerce-pointee-wellformed, r=compiler-errors 2025-02-11 02:53:42 +01:00
rustc_feature Rollup merge of #134090 - veluca93:stable-tf11, r=oli-obk 2025-02-12 20:09:56 -05:00
rustc_fluent_macro
rustc_fs_util
rustc_graphviz Rustfmt 2025-02-08 22:12:13 +00:00
rustc_hir Implement and use BikeshedGuaranteedNoDrop for union/unsafe field validity 2025-02-13 03:45:04 +00:00
rustc_hir_analysis Rollup merge of #136660 - compiler-errors:BikeshedGuaranteedNoDrop, r=lcnr 2025-02-13 03:53:30 -05:00
rustc_hir_pretty Rustfmt 2025-02-08 22:12:13 +00:00
rustc_hir_typeck Auto merge of #135994 - 1c3t3a:rename-unsafe-ptr, r=oli-obk 2025-02-12 23:18:14 +00:00
rustc_incremental Rustfmt 2025-02-08 22:12:13 +00:00
rustc_index Rustfmt 2025-02-08 22:12:13 +00:00
rustc_index_macros update rustc_index_macros feature handling 2024-12-19 20:32:12 +03:00
rustc_infer Rustfmt 2025-02-08 22:12:13 +00:00
rustc_interface Auto merge of #136751 - bjorn3:update_rustfmt, r=Mark-Simulacrum 2025-02-09 15:44:16 +00:00
rustc_lexer Rustfmt 2025-02-08 22:12:13 +00:00
rustc_lint Auto merge of #135994 - 1c3t3a:rename-unsafe-ptr, r=oli-obk 2025-02-12 23:18:14 +00:00
rustc_lint_defs Rollup merge of #135964 - ehuss:cenum_impl_drop_cast, r=Nadrieril 2025-02-05 19:09:33 +08:00
rustc_llvm Rollup merge of #136419 - EnzymeAD:autodiff-tests, r=onur-ozkan,jieyouxu 2025-02-10 16:38:23 +01:00
rustc_log Avoid naming variables str 2025-01-07 14:30:02 +02:00
rustc_macros Rustfmt 2025-02-08 22:12:13 +00:00
rustc_metadata Rustfmt 2025-02-08 22:12:13 +00:00
rustc_middle Implement and use BikeshedGuaranteedNoDrop for union/unsafe field validity 2025-02-13 03:45:04 +00:00
rustc_mir_build Rename rustc_middle::Ty::is_unsafe_ptr to is_raw_ptr 2025-02-10 12:49:18 +00:00
rustc_mir_dataflow Rustfmt 2025-02-08 22:12:13 +00:00
rustc_mir_transform Auto merge of #135994 - 1c3t3a:rename-unsafe-ptr, r=oli-obk 2025-02-12 23:18:14 +00:00
rustc_monomorphize Auto merge of #136751 - bjorn3:update_rustfmt, r=Mark-Simulacrum 2025-02-09 15:44:16 +00:00
rustc_next_trait_solver Use BikeshedGuaranteedNotDrop in unsafe binder type WF too 2025-02-13 03:45:07 +00:00
rustc_parse Stop using span hack for contracts feature gating 2025-02-10 19:51:26 +00:00
rustc_parse_format Rustfmt 2025-02-08 22:12:13 +00:00
rustc_passes Rollup merge of #136833 - workingjubilee:let-the-impossible-be-impossible, r=compiler-errors 2025-02-11 18:04:44 +01:00
rustc_pattern_analysis Get rid of mir::Const::from_ty_const 2025-01-20 04:26:44 +00:00
rustc_privacy Make comma separated lists of anything easier to make for errors 2025-01-31 20:36:44 +00:00
rustc_query_impl Removed dependency on the field-offset crate. 2025-02-05 17:56:06 +01:00
rustc_query_system compiler: remove rustc_target reexport of rustc_abi::HashStableContext 2025-02-11 18:55:48 -08:00
rustc_resolve Rollup merge of #136646 - oli-obk:pattern-types-ast, r=BoxyUwU 2025-02-12 06:07:37 +01:00
rustc_sanitizers check the types in ty::Value to value conversion 2025-01-30 18:13:16 +01:00
rustc_serialize
rustc_session Rollup merge of #135285 - tbu-:pr_fix_typo4, r=GuillaumeGomez 2025-02-11 18:04:22 +01:00
rustc_smir compiler: internally merge Conv::PtxKernel into GpuKernel 2025-02-09 23:14:55 -08:00
rustc_span Rollup merge of #136660 - compiler-errors:BikeshedGuaranteedNoDrop, r=lcnr 2025-02-13 03:53:30 -05:00
rustc_symbol_mangling compiler: remove AbiDatas 2025-02-11 20:18:01 -08:00
rustc_target Rollup merge of #134999 - Berrysoft:dev/new-cygwin-target, r=chenyukang,workingjubilee 2025-02-13 03:53:28 -05:00
rustc_trait_selection Use BikeshedGuaranteedNotDrop in unsafe binder type WF too 2025-02-13 03:45:07 +00:00
rustc_traits Auto merge of #136011 - compiler-errors:query-norm-vaniquishes-us, r=jackh726 2025-01-29 02:12:12 +00:00
rustc_transmute transmutability: fix ICE when passing wrong ADT to ASSUME 2025-02-08 05:44:29 +01:00
rustc_ty_utils Auto merge of #136954 - jhpratt:rollup-koefsot, r=jhpratt 2025-02-13 02:13:24 +00:00
rustc_type_ir Implement and use BikeshedGuaranteedNoDrop for union/unsafe field validity 2025-02-13 03:45:04 +00:00
rustc_type_ir_macros Rustfmt 2025-02-08 22:12:13 +00:00
stable_mir Extend the renaming to coerce_unsafe_ptr 2025-02-10 13:01:55 +00:00