rust/compiler
Yuki Okushi 3356ad7c26
Rollup merge of #77547 - RalfJung:stable-union-drop, r=matthewjasper
stabilize union with 'ManuallyDrop' fields and 'impl Drop for Union'

As [discussed by @SimonSapin and @withoutboats](https://github.com/rust-lang/rust/issues/55149#issuecomment-634692020), this PR proposes to stabilize parts of the `untagged_union` feature gate:

* It will be possible to have a union with field type `ManuallyDrop<T>` for any `T`.
* While at it I propose we also stabilize `impl Drop for Union`; to my knowledge, there are no open concerns around this feature.

In the RFC discussion, we also talked about allowing `&mut T` as another non-`Copy` non-dropping type, but that felt to me like an overly specific exception so I figured we'd wait if there is actually any use for such a special case.

Some things remain unstable and still require the `untagged_union` feature gate:
* Union with fields that do not drop, are not `Copy`, and are not `ManuallyDrop<_>`. The reason to not stabilize this is to avoid semver concerns around libraries adding `Drop` implementations later. (This is already not fully semver compatible as, to my knowledge, the borrow checker will exploit the non-dropping nature of any type, but it seems prudent to avoid further increasing the amount of trouble adding an `impl Drop` can cause.)

Due to this, quite a few tests still need the `untagged_union` feature, but I think the ones where I could remove the feature flag provide good test coverage for the stable part.

Cc @rust-lang/lang
2020-10-17 05:36:38 +09:00
..
rustc just max_level_info 2020-09-11 09:37:51 -07:00
rustc_apfloat Backport another LLVM commit to rustc_apfloat 2020-10-04 02:02:25 +02:00
rustc_arena Arena: Copy cold_path and remove rustc_data_structures dependency 2020-10-15 10:56:33 +02:00
rustc_ast Rollup merge of #77739 - est31:remove_unused_code, r=petrochenkov,varkor 2020-10-15 07:32:29 +09:00
rustc_ast_lowering Replace target.target with target and target.ptr_width with target.pointer_width 2020-10-15 12:02:24 +02:00
rustc_ast_passes Replace target.target with target and target.ptr_width with target.pointer_width 2020-10-15 12:02:24 +02:00
rustc_ast_pretty Auto merge of #77135 - Aaron1011:pretty-ignore-paren, r=petrochenkov 2020-10-14 00:26:50 +00:00
rustc_attr Move PartialOrd impl out of rustc 2020-10-11 11:11:33 -04:00
rustc_builtin_macros Replace target.target with target and target.ptr_width with target.pointer_width 2020-10-15 12:02:24 +02:00
rustc_codegen_llvm Auto merge of #77972 - Mark-Simulacrum:side-effect-loop, r=nagisa 2020-10-16 14:06:37 +00:00
rustc_codegen_ssa Auto merge of #77972 - Mark-Simulacrum:side-effect-loop, r=nagisa 2020-10-16 14:06:37 +00:00
rustc_data_structures Remove unused code from remaining compiler crates 2020-10-14 04:14:32 +02:00
rustc_driver Rollup merge of #77493 - hosseind88:ICEs_should_always_print_the_top_of_the_query_stack, r=oli-obk 2020-10-16 02:10:09 +02:00
rustc_error_codes Rollup merge of #76119 - Amjad50:stabilizing-move_ref_pattern, r=nikomatsakis 2020-10-16 02:10:07 +02:00
rustc_errors Remove unused code from remaining compiler crates 2020-10-14 04:14:32 +02:00
rustc_expand Remove unused code from remaining compiler crates 2020-10-14 04:14:32 +02:00
rustc_feature Rollup merge of #76119 - Amjad50:stabilizing-move_ref_pattern, r=nikomatsakis 2020-10-16 02:10:07 +02:00
rustc_fs_util Remove unused code from remaining compiler crates 2020-10-14 04:14:32 +02:00
rustc_graphviz /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_hir ensure arguments are included in count mismatch span 2020-10-15 10:22:39 -04:00
rustc_hir_pretty Rollup merge of #77739 - est31:remove_unused_code, r=petrochenkov,varkor 2020-10-15 07:32:29 +09:00
rustc_incremental /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_index cache types during normalization 2020-09-19 17:27:13 +02:00
rustc_infer Remove unused code from rustc_infer 2020-10-14 04:14:32 +02:00
rustc_interface Rollup merge of #77795 - bjorn3:codegen_backend_interface_refactor, r=oli-obk 2020-10-14 02:30:38 +02:00
rustc_lexer Noticed a potential bug in eat_while(): it doesn't account for number of UTF8 bytes. 2020-10-09 11:12:54 +02:00
rustc_lint Replace target.target with target and target.ptr_width with target.pointer_width 2020-10-15 12:02:24 +02:00
rustc_llvm Auto merge of #76859 - Aaron1011:fix/llvm-cgu-reuse, r=davidtwco,nikic 2020-10-11 20:50:02 +00:00
rustc_macros Remove unused #[allow(...)] statements from compiler/ 2020-09-26 01:25:55 +02:00
rustc_metadata Replace target.target with target and target.ptr_width with target.pointer_width 2020-10-15 12:02:24 +02:00
rustc_middle Rollup merge of #77493 - hosseind88:ICEs_should_always_print_the_top_of_the_query_stack, r=oli-obk 2020-10-16 02:10:09 +02:00
rustc_mir Auto merge of #77947 - tmiasko:promoted-scope, r=oli-obk 2020-10-16 02:27:49 +00:00
rustc_mir_build Rollup merge of #76119 - Amjad50:stabilizing-move_ref_pattern, r=nikomatsakis 2020-10-16 02:10:07 +02:00
rustc_parse Rollup merge of #77780 - calebcartwright:cast-expr-attr-span, r=oli-obk 2020-10-16 02:10:22 +02:00
rustc_parse_format /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_passes stabilize union with 'ManuallyDrop' fields and 'impl Drop for Union' 2020-10-16 11:33:33 +02:00
rustc_plugin_impl /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_privacy Separate bounds and predicates for associated/opaque types 2020-10-06 11:19:29 +01:00
rustc_query_system Remove unused code from rustc_query_system 2020-10-14 04:14:32 +02:00
rustc_resolve Rollup merge of #75209 - Hirrolot:suggest-macro-imports, r=estebank 2020-10-17 05:36:32 +09:00
rustc_save_analysis /nightly/nightly-rustc 2020-09-23 21:51:56 +02:00
rustc_serialize Replace absolute paths with relative ones 2020-10-13 14:16:45 +02:00
rustc_session Remove rustc_session::config::Config 2020-10-15 12:02:24 +02:00
rustc_span Rollup merge of #77739 - est31:remove_unused_code, r=petrochenkov,varkor 2020-10-15 07:32:29 +09:00
rustc_symbol_mangling Rollup merge of #75675 - davidtwco:symbol-mangling-impl-params, r=eddyb 2020-10-16 02:10:02 +02:00
rustc_target Replace target.target with target and target.ptr_width with target.pointer_width 2020-10-15 12:02:24 +02:00
rustc_trait_selection Auto merge of #77873 - sexxi-goose:use_tuple_inference_for_closures, r=nikomatsakis 2020-10-15 04:17:10 +00:00
rustc_traits Address comments 2020-10-14 00:17:42 -04:00
rustc_ty Move item_bounds to typeck::collect 2020-10-06 11:18:45 +01:00
rustc_typeck stabilize union with 'ManuallyDrop' fields and 'impl Drop for Union' 2020-10-16 11:33:33 +02:00