rust/compiler
Michael Howell dbd4fd5716 feat(rustc_lint): add dyn_drop
Based on the conversation in #86747.

Explanation
-----------

A trait object bound of the form `dyn Drop` is most likely misleading
and not what the programmer intended.

`Drop` bounds do not actually indicate whether a type can be trivially
dropped or not, because a composite type containing `Drop` types does
not necessarily implement `Drop` itself. Naïvely, one might be tempted
to write a deferred drop system, to pull cleaning up memory out of a
latency-sensitive code path, using `dyn Drop` trait objects. However,
this breaks down e.g. when `T` is `String`, which does not implement
`Drop`, but should probably be accepted.

To write a trait object bound that accepts anything, use a placeholder
trait with a blanket implementation.

```rust
trait Placeholder {}
impl<T> Placeholder for T {}
fn foo(_x: Box<dyn Placeholder>) {}
```
2021-07-18 07:55:57 -07:00
..
rustc
rustc_apfloat
rustc_arena
rustc_ast Use LocalExpnId where possible. 2021-07-17 19:41:02 +02:00
rustc_ast_lowering Remove refs from pat slices 2021-07-15 16:09:57 -05:00
rustc_ast_passes Auto merge of #83918 - workingjubilee:stable-rangefrom-pat, r=joshtriplett 2021-07-11 06:31:42 +00:00
rustc_ast_pretty Rework SESSION_GLOBALS API to prevent overwriting it 2021-07-08 16:16:28 +02:00
rustc_attr Enhance well-formedness checks for #[repr(...)] attributes 2021-07-09 22:03:48 +02:00
rustc_builtin_macros Use LocalExpnId where possible. 2021-07-17 19:41:02 +02:00
rustc_codegen_cranelift Rollup merge of #87092 - ricobbe:fix-raw-dylib-multiple-definitions, r=petrochenkov 2021-07-18 14:21:56 +09:00
rustc_codegen_llvm Rollup merge of #87092 - ricobbe:fix-raw-dylib-multiple-definitions, r=petrochenkov 2021-07-18 14:21:56 +09:00
rustc_codegen_ssa Rollup merge of #87092 - ricobbe:fix-raw-dylib-multiple-definitions, r=petrochenkov 2021-07-18 14:21:56 +09:00
rustc_data_structures Some perf optimizations and logging 2021-07-17 16:09:17 -04:00
rustc_driver Auto merge of #80182 - in42:stack_trace, r=tmandry 2021-07-02 05:40:51 +00:00
rustc_error_codes Rollup merge of #86838 - lambinoo:I-69630-rust_const_unstable_check_const, r=oli-obk 2021-07-08 18:30:34 +02:00
rustc_errors Simplify future incompatible reporting. 2021-07-11 13:08:58 -07:00
rustc_expand Use LocalExpnId where possible. 2021-07-17 19:41:02 +02:00
rustc_feature Auto merge of #87201 - GuillaumeGomez:rollup-4loi2q9, r=GuillaumeGomez 2021-07-16 19:04:16 +00:00
rustc_fs_util
rustc_graphviz
rustc_hir Remove refs from pat slices 2021-07-15 16:09:57 -05:00
rustc_hir_pretty
rustc_incremental Move OnDiskCache to rustc_query_impl. 2021-07-18 11:14:07 +02:00
rustc_index
rustc_infer Some perf optimizations and logging 2021-07-17 16:09:17 -04:00
rustc_interface Remove deadlock virtual call. 2021-07-18 11:14:08 +02:00
rustc_lexer
rustc_lint feat(rustc_lint): add dyn_drop 2021-07-18 07:55:57 -07:00
rustc_lint_defs Simplify future incompatible reporting. 2021-07-11 13:08:58 -07:00
rustc_llvm Upgrade cc crate to 1.0.69 2021-07-13 17:58:50 +09:00
rustc_macros Move OnDiskCache to rustc_query_impl. 2021-07-18 11:14:07 +02:00
rustc_metadata Auto merge of #86698 - cjgillot:modc, r=estebank 2021-07-18 10:42:23 +00:00
rustc_middle Auto merge of #86698 - cjgillot:modc, r=estebank 2021-07-18 10:42:23 +00:00
rustc_mir Auto merge of #85686 - ptrojahn:loop_reinitialize, r=estebank 2021-07-18 02:13:12 +00:00
rustc_mir_build Auto merge of #87123 - RalfJung:miri-provenance-overhaul, r=oli-obk 2021-07-17 15:26:27 +00:00
rustc_parse Auto merge of #87242 - JohnTitor:rollup-t9rmwpo, r=JohnTitor 2021-07-18 08:15:17 +00:00
rustc_parse_format Rework SESSION_GLOBALS API to prevent overwriting it 2021-07-08 16:16:28 +02:00
rustc_passes Warn about useless assignments of variables/fields to themselves 2021-07-14 16:29:35 +02:00
rustc_plugin_impl
rustc_privacy Make resolutions a query. 2021-07-06 19:22:27 +02:00
rustc_query_impl Remove deadlock virtual call. 2021-07-18 11:14:08 +02:00
rustc_query_system
rustc_resolve Use LocalExpnId where possible. 2021-07-17 19:41:02 +02:00
rustc_save_analysis rustc_span: Revert addition of proc_macro field to ExpnKind::Macro 2021-07-10 23:03:35 +03:00
rustc_serialize
rustc_session Rollup merge of #87145 - jsgf:fix-lint-opt-hash, r=michaelwoerister 2021-07-16 10:08:07 +02:00
rustc_span Rollup merge of #87170 - xFrednet:clippy-5393-add-diagnostic-items, r=Manishearth,oli-obk 2021-07-18 14:21:57 +09:00
rustc_symbol_mangling Revert "Revert "Merge CrateDisambiguator into StableCrateId"" 2021-07-06 11:28:04 +02:00
rustc_target Auto merge of #87124 - Andy-Python-Programmer:code_model_uefi_patch, r=petrochenkov 2021-07-17 10:15:33 +00:00
rustc_trait_selection Add needs_normalization 2021-07-17 16:09:22 -04:00
rustc_traits Add initial implementation of HIR-based WF checking for diagnostics 2021-07-16 16:29:02 -05:00
rustc_ty_utils Add impl_constness query 2021-07-10 20:54:49 +08:00
rustc_type_ir
rustc_typeck Rollup merge of #86843 - FabianWolff:issue-86820, r=lcnr 2021-07-18 14:21:54 +09:00