diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-02-12 18:04:11 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-12 18:04:11 +0100 |
| commit | 8e5f722ece25a9767bde50d4ad1b7161df1ee7f9 (patch) | |
| tree | 2047975b00aa5025667ad90bed2664950db3734b /compiler/rustc_next_trait_solver | |
| parent | 323f66a932cc0c16bfa98fc0556f793624e051b3 (diff) | |
| parent | 95c5b060004928984b6b76a9ef67a3ca7147568c (diff) | |
| download | rust-8e5f722ece25a9767bde50d4ad1b7161df1ee7f9.tar.gz rust-8e5f722ece25a9767bde50d4ad1b7161df1ee7f9.zip | |
Rollup merge of #120972 - lukas-code:autoderef-type-error, r=compiler-errors
fix ICE for deref coercions with type errors
Follow-up to https://github.com/rust-lang/rust/pull/120895, where I made types with errors go through the full coercion code, which is necessary if we want to build MIR for bodies with errors (https://github.com/rust-lang/rust/pull/120550).
The code for coercing `&T` to `&U` currently assumes that autoderef for `&T` will succeed for at least two steps (`&T` and `T`):
https://github.com/rust-lang/rust/blob/b17491c8f6d555386104dfd82004c01bfef09c95/compiler/rustc_hir_typeck/src/coercion.rs#L339-L464
But for types with errors, we previously only returned the no-op autoderef step (`&{type error}` -> `&{type error}`) and then stopped early. This PR changes autoderef for types with errors to still go through the built-in derefs (e.g. `&&{type error}` -> `&{type error}` -> `{type error}`) and only stop early when it would have to go looking for `Deref` trait impls.
fixes https://github.com/rust-lang/rust/issues/120945
r? ``@compiler-errors`` or compiler
Diffstat (limited to 'compiler/rustc_next_trait_solver')
0 files changed, 0 insertions, 0 deletions
