about summary refs log tree commit diff
path: root/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2024-02-13 22:51:53 +0100
committerGitHub <noreply@github.com>2024-02-13 22:51:53 +0100
commitdb9591cfb6c1c0883256a3bdc6bbb03dc485a58a (patch)
tree84851bf3649bf75422a9122ea2b2e52ce0a2064f /compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
parenta84bb95a1f65bfe25038f188763a18e096a86ab2 (diff)
parent2b4a2b95dd1a6b85678537332045d122afda682f (diff)
downloadrust-db9591cfb6c1c0883256a3bdc6bbb03dc485a58a.tar.gz
rust-db9591cfb6c1c0883256a3bdc6bbb03dc485a58a.zip
Rollup merge of #118882 - compiler-errors:normalized-sig-wf, r=lcnr
Check normalized call signature for WF in mir typeck

Unfortunately we don't check that the built-in implementations for `Fn*` traits are actually well-formed in the same way that we do for user-provided impls.

Essentially, when checking a call terminator, we end up with a signature that references an unnormalized `<[closure] as FnOnce<...>>::Output` in its output. That output type, due to the built-in impl, doesn't follow the expected rule that `WF(ty)` implies `WF(normalized(ty))`. We fix this by also checking the normalized signature here.

**See** boxy's detailed and useful explanation comment which explains this in more detail: https://github.com/rust-lang/rust/issues/114936#issuecomment-1710388741

Fixes #114936
Fixes #118876

r? types
cc ``@BoxyUwU`` ``@lcnr``
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions