about summary refs log tree commit diff
path: root/compiler/rustc_llvm/llvm-wrapper
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2025-08-25 22:56:37 +0000
committerbors <bors@rust-lang.org>2025-08-25 22:56:37 +0000
commitd327d651e2583eb601978179f2ca9808f5e243bb (patch)
tree227e23c440f2b35e073db48fc71278ce55ded2e7 /compiler/rustc_llvm/llvm-wrapper
parent54c581243c977c7662c949b5795c31147f8a60ed (diff)
parentd6a18e18676f355e9f5350a9204f81c4dd2bc0f3 (diff)
downloadrust-d327d651e2583eb601978179f2ca9808f5e243bb.tar.gz
rust-d327d651e2583eb601978179f2ca9808f5e243bb.zip
Auto merge of #145711 - lcnr:non-defining-uses-hir-typeck, r=BoxyUwU
Support non-defining uses in HIR typeck

This changes the impl of `NormalizesTo` for opaque types to be structural during HIR typeck. The previous impl equated region variables of the opaque type key with existing entries which can result in spurious leak check errors and also results in mismatches with MIR borrowck, theoretically causing ICE.

The approach is very similar to rust-lang/rust#145244 in MIR typeck:
- we collect all uses of opaque types during HIR typeck
- before writeback, we search for *defining uses*
  - the opaque type key has fully universal generic args modulo regions
  - the hidden type has no infer vars
- we use these defining uses to compute the concrete type for the opaque and map it to the definition site
- we use this concrete type to check the type of all uses of opaques during HIR typeck. This also constrains infer vars in non-defining uses

Fixes https://github.com/rust-lang/trait-system-refactor-initiative/issues/135, fixes https://github.com/rust-lang/trait-system-refactor-initiative/issues/49.

r? `@BoxyUwU`
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper')
0 files changed, 0 insertions, 0 deletions