rust/compiler
bors 8327047b23 Auto merge of #113393 - compiler-errors:next-solver-unsize-rhs, r=lcnr
Normalize the RHS of an `Unsize` goal in the new solver

`Unsize` goals are... tricky. Not only do they structurally match on their self type, but they're also structural on their other type parameter. I'm pretty certain that it is both incomplete and also just plain undesirable to not consider normalizing the RHS of an unsize goal. More practically, I'd like for this code to work:

```rust
trait A {}
trait B: A {}

impl A for usize {}
impl B for usize {}

trait Mirror {
    type Assoc: ?Sized;
}

impl<T: ?Sized> Mirror for T {
    type Assoc = T;
}

fn main() {
    // usize: Unsize<dyn B>
    let x = Box::new(1usize) as Box<<dyn B as Mirror>::Assoc>;
    // dyn A: Unsize<dyn B>
    let y = x as Box<<dyn A as Mirror>::Assoc>;
}
```

---

In order to achieve this, we add `EvalCtxt::normalize_non_self_ty` (naming modulo bikeshedding), which *must* be used for all non-self type arguments that are structurally matched in candidate assembly. Currently this is only necessary for `Unsize`'s argument, but I could see future traits requiring this (hopefully rarely) in the future. It uses `repeat_while_none` to limit infinite looping, and normalizes the self type until it is no longer an alias.

Also, we need to fix feature gate detection for `trait_upcasting` and `unsized_tuple_coercion` when HIR typeck has unnormalized types. We can do that by checking the `ImplSource` returned by selection, which necessitates adding a new impl source for tuple upcasting.
2023-07-25 17:10:31 +00:00
..
rustc
rustc_abi interpret: refactor projection code to work on a common trait, and use that for visitors 2023-07-25 14:30:58 +02:00
rustc_apfloat
rustc_arena
rustc_ast more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_ast_lowering more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_ast_passes Lint against misplaced where-clauses on assoc tys in traits 2023-07-11 01:19:11 +02:00
rustc_ast_pretty more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_attr Add infrastructure #[rustc_confusables] attribute to allow targeted 2023-07-16 19:22:03 +08:00
rustc_baked_icu_data
rustc_borrowck Rename arg_iter to iter_instantiated 2023-07-17 21:04:12 +00:00
rustc_builtin_macros fix couple of clippy findings: 2023-07-23 10:50:14 +02:00
rustc_codegen_cranelift Merge commit '1eded3619d0e55d57521a259bf27a03906fdfad0' into sync_cg_clif-2023-07-22 2023-07-22 13:32:34 +00:00
rustc_codegen_gcc Auto merge of #113877 - JhonnyBillM:reuse-codegen-ssa-monomorphization-errors-in-gcc, r=davidtwco 2023-07-24 11:29:59 +00:00
rustc_codegen_llvm Revert "Auto merge of #113166 - moulins:ref-niches-initial, r=oli-obk" 2023-07-21 22:35:57 -07:00
rustc_codegen_ssa remove redundant clones 2023-07-23 09:48:07 +02:00
rustc_const_eval Auto merge of #113393 - compiler-errors:next-solver-unsize-rhs, r=lcnr 2023-07-25 17:10:31 +00:00
rustc_data_structures more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_driver
rustc_driver_impl Rollup merge of #113780 - dtolnay:printkindpath, r=b-naber 2023-07-21 06:52:28 +02:00
rustc_error_codes error/E0691: include alignment in error message 2023-07-21 11:04:16 +02:00
rustc_error_messages On nightly, dump ICE backtraces to disk 2023-07-19 14:10:07 +00:00
rustc_errors Optimize format usage 2023-07-24 00:08:09 -04:00
rustc_expand Don't translate compiler-internal bug messages 2023-07-20 09:51:47 +00:00
rustc_feature Add infrastructure #[rustc_confusables] attribute to allow targeted 2023-07-16 19:22:03 +08:00
rustc_fluent_macro
rustc_fs_util
rustc_graphviz
rustc_hir more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_hir_analysis fix clippy::useless_format 2023-07-23 11:14:52 +02:00
rustc_hir_pretty
rustc_hir_typeck Make everything builtin! 2023-07-25 16:08:58 +00:00
rustc_incremental Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_index Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_infer fix some clippy::style findings 2023-07-23 23:36:56 +02:00
rustc_interface Revert "Auto merge of #113166 - moulins:ref-niches-initial, r=oli-obk" 2023-07-21 22:35:57 -07:00
rustc_lexer Auto merge of #113476 - fee1-dead-contrib:c-str-lit, r=petrochenkov 2023-07-25 12:04:34 +00:00
rustc_lint lint/ctypes: only try normalize 2023-07-21 15:42:25 +01:00
rustc_lint_defs Fix removal span calculation of unused_qualifications suggestion 2023-07-18 09:52:08 +08:00
rustc_llvm Support .comment section like GCC/Clang (!llvm.ident) 2023-07-21 22:01:50 +02:00
rustc_log
rustc_macros Re-format let-else per rustfmt update 2023-07-12 21:49:27 -04:00
rustc_metadata Auto merge of #113958 - lukas-code:doc-links, r=GuillaumeGomez,petrochenkov 2023-07-25 01:35:53 +00:00
rustc_middle Auto merge of #113393 - compiler-errors:next-solver-unsize-rhs, r=lcnr 2023-07-25 17:10:31 +00:00
rustc_mir_build Make it clearer that edition functions are >=, not == 2023-07-19 16:38:35 +00:00
rustc_mir_dataflow Turn copy into moves during DSE. 2023-07-19 09:59:12 +00:00
rustc_mir_transform Reuse MIR validator for inliner. 2023-07-21 13:58:33 +00:00
rustc_monomorphize more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_parse Auto merge of #113476 - fee1-dead-contrib:c-str-lit, r=petrochenkov 2023-07-25 12:04:34 +00:00
rustc_parse_format Fix unit tests 2023-07-19 16:37:09 +00:00
rustc_passes validate doc(masked) 2023-07-24 18:04:35 +02:00
rustc_plugin_impl
rustc_privacy refactor(rustc_middle): Substs -> GenericArg 2023-07-14 13:27:35 +01:00
rustc_query_impl fix couple of clippy findings: 2023-07-23 10:50:14 +02:00
rustc_query_system Revert "Auto merge of #113166 - moulins:ref-niches-initial, r=oli-obk" 2023-07-21 22:35:57 -07:00
rustc_resolve Auto merge of #113980 - bvanjoi:fix-113953, r=petrochenkov 2023-07-25 05:25:11 +00:00
rustc_serialize
rustc_session Add missing documentation for Session::time 2023-07-24 16:50:25 +02:00
rustc_smir Dynamic for smir 2023-07-24 00:17:45 -04:00
rustc_span Make it clearer that edition functions are >=, not == 2023-07-19 16:38:35 +00:00
rustc_symbol_mangling more clippy::style fixes: 2023-07-23 23:39:04 +02:00
rustc_target Auto merge of #113411 - unikraft:unikraft, r=wesleywiser 2023-07-25 03:41:56 +00:00
rustc_trait_selection Make everything builtin! 2023-07-25 16:08:58 +00:00
rustc_traits refactor(rustc_middle): Substs -> GenericArg 2023-07-14 13:27:35 +01:00
rustc_transmute Auto merge of #113677 - bryangarza:unevaluated-const-ice_issue-110892, r=davidtwco 2023-07-18 09:07:32 +00:00
rustc_ty_utils Make everything builtin! 2023-07-25 16:08:58 +00:00
rustc_type_ir add docs for AliasKind::Inherent 2023-07-22 15:38:41 -04:00