rust/compiler/rustc_hir_analysis/src
Matthias Krüger a1c98ca160
Rollup merge of #132832 - compiler-errors:late-ty, r=cjgillot
Deny capturing late-bound ty/const params in nested opaques

First, this reverts a7f609504c. I can't exactly remember why I approved this specific bit of https://github.com/rust-lang/rust/pull/132466; specifically, I don't know that the purpose of that commit is, and afaict we will never have an opaque that captures late-bound params through a const because opaques can't be used inside of anon consts. Am I missing something `@cjgillot?` Since I can't see a case where this matters, and no tests seem to fail.

The second commit adds a `deny_late_regions: bool` to distinguish `Scope::LateBoundary` which should deny *any* late-bound params or just ty/consts. Then, when resolving opaques we wrap ourselves in a `Scope::LateBoundary { deny_late_regions: false }` so that we deny late-bound ty/const, which fixes a bunch of ICEs that all vaguely look like `impl for<T> Trait<Assoc = impl OtherTrait<T>>`.

I guess this could be achieved other ways; for example, with a different scope kind, or maybe we could just reuse `Scope::Opaque`. But this seems a bit more verbose. I'm open to feedback anyways.

Fixes #131535
Fixes #131637
Fixes #132530

I opted to remove those crashes tests ^ without adding them as regular tests, since they're basically triggering uninteresting late-bound ICEs far off in the trait solver, and the reason that existing tests such as `tests/ui/type-alias-impl-trait/non-lifetime-binder-in-constraint.rs` don't ICE are kinda just coincidental (i.e. due to a missing impl block). I don't really feel motivated to add random permutations to tests just to exercise non-lifetime binders.

r? cjgillot
2024-11-16 21:05:46 +01:00
..
check Simplify some places that deal with generic parameter defaults 2024-11-11 21:29:18 +01:00
coherence TypingMode 🤔 2024-10-29 17:01:24 +01:00
collect Deny capturing late-bound ty/ct params in nested opaques 2024-11-10 04:30:33 +00:00
errors Clarify implicit captures for RPITIT 2024-10-10 11:46:51 -07:00
hir_ty_lowering ty::BrK -> ty::BoundRegionKind::K 2024-11-04 04:45:52 +00:00
impl_wf_check Rename the FIXMEs, remove a few that dont matter anymore 2024-11-03 18:59:41 +00:00
outlives Implement const effect predicate in new solver 2024-10-24 09:46:36 +00:00
variance Add variances to RPITITs 2024-10-10 11:46:48 -07:00
autoderef.rs Swap Vec<PredicateObligation> to type alias 2024-10-12 15:17:08 +01:00
bounds.rs Merge HostPolarity and BoundConstness 2024-10-30 16:23:16 +00:00
check_unused.rs Remove #[macro_use] extern crate tracing from rustc_hir_analysis. 2024-08-30 17:14:59 +10:00
collect.rs ty::BrK -> ty::BoundRegionKind::K 2024-11-04 04:45:52 +00:00
constrained_generic_params.rs Remove #[macro_use] extern crate tracing from rustc_hir_analysis. 2024-08-30 17:14:59 +10:00
delegation.rs Effects cleanup 2024-10-26 10:19:07 +08:00
errors.rs Reject generic self types. 2024-10-30 10:48:08 +00:00
hir_wf_check.rs TypingMode 🤔 2024-10-29 17:01:24 +01:00
impl_wf_check.rs nightly feature tracking: get rid of the per-feature bool fields 2024-10-23 09:14:41 +01:00
lib.rs compiler: Directly use rustc_abi in hir_{analysis,typeck} 2024-11-03 13:38:47 -08:00