rust/compiler
bors 085c24790e Auto merge of #143036 - compiler-errors:no-dyn-star, r=oli-obk
Remove support for `dyn*` from the compiler

This PR removes support for `dyn*` (https://github.com/rust-lang/rust/issues/102425), which are a currently un-RFC'd experiment that was opened a few years ago to explore a component that we thought was necessary for AFIDT (async fn in dyn trait).

It doesn't seem like we are going to need `dyn*` types -- even in an not-exposed-to-the-user way[^1] -- for us to implement AFIDT. Given that AFIDT was the original motivating purpose of `dyn*` types, I don't really see a compelling reason to have to maintain their implementation in the compiler.

[^1]: Compared to, e.g., generators whih are an unstable building block we use to implement stable syntax like `async {}`.

We've learned quite a lot from `dyn*`, but I think at this point its current behavior leads to more questions than answers. For example, `dyn*` support today remains somewhat fragile; it ICEs in many cases where the current "normal" `dyn Trait` types rely on their unsizedness for their vtable-based implementation to be sound I wouldn't be surprised if it's unsound in other ways, though I didn't play around with it too much. See the examples below.

```rust
#![feature(dyn_star)]

trait Foo {
    fn hello(self);
}

impl Foo for usize {
    fn hello(self) {
        println!("hello, world");
    }
}

fn main() {
    let x: dyn* Foo = 1usize;
    x.hello();
}
```

And:

```rust
#![feature(dyn_star)]

trait Trait {
    type Out where Self: Sized;
}

fn main() {
    let x: <dyn* Trait as Trait>::Out;
}
```

...and probably many more problems having to do with the intersection of dyn-compatibility and `Self: Sized` bounds that I was too lazy to look into like:
* GATs
* Methods with invalid signatures
* Associated consts

Generally, `dyn*` types also end up getting in the way of working with [normal `dyn` types](https://github.com/rust-lang/rust/issues/102425#issuecomment-1712604409) to an extent that IMO outweighs the benefit of experimentation.

I recognize that there are probably other, more creative usages of `dyn*` that are orthogonal to AFIDT. However, I think any work along those lines should first have to think through some of the more fundamental interactions between `dyn*` and dyn-compatibility before we think about reimplementing them in the type system.

---

I'm planning on removing the `DynKind` enum and the `PointerLike` built-in trait from the compiler after this PR lands.

Closes rust-lang/rust#102425.

cc `@eholk` `@rust-lang/lang` `@rust-lang/types`

Closes rust-lang/rust#116979.
Closes rust-lang/rust#119694.
Closes rust-lang/rust#134591.
Closes rust-lang/rust#104800.
2025-07-01 21:50:21 +00:00
..
rustc
rustc_abi move discr=varid check to layout_sanity_check 2025-06-28 14:47:27 +02:00
rustc_arena Introduce Arena::try_alloc_from_iter. 2025-04-19 01:13:18 +00:00
rustc_ast Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_ast_ir
rustc_ast_lowering Introduce ByteSymbol. 2025-06-30 20:42:27 +10:00
rustc_ast_passes Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_ast_pretty Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_attr_data_structures Port #[rustc_object_lifetime_default] to the new attribute parsing infrastructure 2025-07-01 16:31:23 +02:00
rustc_attr_parsing Rollup merge of #143240 - JonathanBrouwer:object_lifetime_default_parser, r=oli-obk 2025-07-01 17:47:04 +02:00
rustc_baked_icu_data
rustc_borrowck Auto merge of #143036 - compiler-errors:no-dyn-star, r=oli-obk 2025-07-01 21:50:21 +00:00
rustc_builtin_macros Introduce ByteSymbol. 2025-06-30 20:42:27 +10:00
rustc_codegen_cranelift Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_codegen_gcc Auto merge of #143254 - matthiaskrgr:rollup-7x8bxek, r=matthiaskrgr 2025-06-30 22:36:52 +00:00
rustc_codegen_llvm Rollup merge of #143125 - tgross35:aarch64-neon-llvm19-f16, r=cuviper 2025-07-01 04:25:34 +02:00
rustc_codegen_ssa Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_const_eval Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_data_structures Rollup merge of #142868 - klensy:dc, r=oli-obk 2025-06-22 17:35:36 +02:00
rustc_driver Remove recursion_limit increases. 2025-04-02 16:25:27 +11:00
rustc_driver_impl Rollup merge of #143019 - danielframpton:codegen-backend-parse, r=bjorn3 2025-06-30 20:49:40 +02:00
rustc_error_codes compiler: Trim the misleading C of C-cmse from errors 2025-06-25 00:52:10 -07:00
rustc_error_messages Remove unused feature gates 2025-06-28 23:36:46 +00:00
rustc_errors Rollup merge of #143264 - Muscraft:fix-suggestion-filename, r=compiler-errors 2025-07-01 04:25:38 +02:00
rustc_expand Auto merge of #143267 - matthiaskrgr:rollup-suvzar6, r=matthiaskrgr 2025-07-01 05:31:05 +00:00
rustc_feature Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_fluent_macro Remove all unused feature gates from the compiler 2025-06-08 14:50:42 +00:00
rustc_fs_util Retry if creating temp fails with access denied 2025-04-25 11:28:36 +00:00
rustc_graphviz
rustc_hashes
rustc_hir Auto merge of #143036 - compiler-errors:no-dyn-star, r=oli-obk 2025-07-01 21:50:21 +00:00
rustc_hir_analysis Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_hir_pretty Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_hir_typeck Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_incremental Auto merge of #139758 - Zoxc:thread-local-graph, r=oli-obk 2025-05-07 12:39:54 +00:00
rustc_index index: add method for checking range on DenseBitSet 2025-06-04 00:47:12 +02:00
rustc_index_macros In rustc_mir_tranform, iterate over index newtypes instead of ints 2025-04-12 11:53:07 +00:00
rustc_infer Do not freshen ReError 2025-06-28 20:48:58 +00:00
rustc_interface Rollup merge of #143228 - nnethercote:macro-stats-build-scripts, r=Kobzol 2025-06-30 20:49:43 +02:00
rustc_lexer rustc_lexer: typo fix + small cleanups 2025-06-06 13:08:16 +00:00
rustc_lint Introduce ByteSymbol. 2025-06-30 20:42:27 +10:00
rustc_lint_defs make tidy-alphabetical use a natural sort 2025-06-25 22:52:38 +02:00
rustc_llvm rustc_llvm: add Windows system libs only when cross-compiling from Windows 2025-05-31 15:47:14 +02:00
rustc_log Add documentation for init_logger_with_additional_layer 2025-06-12 12:11:15 +02:00
rustc_macros Use tidy to sort sym::* items 2025-06-28 09:25:55 +00:00
rustc_metadata Auto merge of #143013 - bjorn3:split_exported_symbols, r=oli-obk 2025-07-01 11:53:02 +00:00
rustc_middle Auto merge of #143036 - compiler-errors:no-dyn-star, r=oli-obk 2025-07-01 21:50:21 +00:00
rustc_mir_build Auto merge of #141875 - nnethercote:ByteSymbol, r=petrochenkov 2025-07-01 02:22:42 +00:00
rustc_mir_dataflow mir: Use the new method for BasicBlockData 2025-06-29 20:39:13 +08:00
rustc_mir_transform Auto merge of #143036 - compiler-errors:no-dyn-star, r=oli-obk 2025-07-01 21:50:21 +00:00
rustc_monomorphize Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_next_trait_solver Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_parse Auto merge of #143036 - compiler-errors:no-dyn-star, r=oli-obk 2025-07-01 21:50:21 +00:00
rustc_parse_format update to literal-escaper 0.0.4 for better API without unreachable and faster string parsing 2025-06-23 06:36:22 +00:00
rustc_passes Rollup merge of #143279 - GuillaumeGomez:rm-itemkind-descr, r=oli-obk 2025-07-01 17:47:06 +02:00
rustc_pattern_analysis Add #[loop_match] for improved DFA codegen 2025-06-23 20:43:04 +02:00
rustc_privacy Reorder fields in hir::ItemKind variants. 2025-05-30 02:23:20 +10:00
rustc_proc_macro update to literal-escaper 0.0.4 for better API without unreachable and faster string parsing 2025-06-23 06:36:22 +00:00
rustc_query_impl Auto merge of #140145 - Zoxc:job-server-proxy, r=SparrowLii 2025-05-01 04:11:52 +00:00
rustc_query_system Rollup merge of #142384 - celinval:chores-rayon-mv, r=oli-obk 2025-06-20 23:25:54 -04:00
rustc_resolve explain ImportData::imported_module 2025-06-29 00:23:35 +08:00
rustc_sanitizers Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_serialize Introduce ByteSymbol. 2025-06-30 20:42:27 +10:00
rustc_session Rollup merge of #142809 - KMJ-007:ad-type-analysis-flag, r=ZuseZ4 2025-06-25 22:14:55 +02:00
rustc_smir Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_span Introduce ByteSymbol. 2025-06-30 20:42:27 +10:00
rustc_symbol_mangling Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_target Rollup merge of #141311 - folkertdev:tidy-natural-sort, r=jieyouxu 2025-06-26 15:47:17 +02:00
rustc_thread_pool Apply suggestions from code review 2025-06-16 12:27:47 -07:00
rustc_trait_selection Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_traits Remove some glob imports from the type system 2025-06-25 15:35:16 +00:00
rustc_transmute tag_for_variant: properly pass TypingEnv 2025-06-27 17:04:33 +02:00
rustc_ty_utils Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_type_ir Remove support for dyn* 2025-07-01 19:00:21 +00:00
rustc_type_ir_macros Split TypeFolder and FallibleTypeFolder 2025-04-15 18:30:35 +00:00
stable_mir Change rustc_driver dependency on stable_mir crate 2025-04-30 15:39:52 -07:00