Skip to content

Commit

Permalink
Auto merge of rust-lang#11760 - compiler-errors:escaping, r=Jarcho
Browse files Browse the repository at this point in the history
Don't check for late-bound vars, check for escaping bound vars

Fixes an assertion that didn't make sense. Many valid and well-formed types *have* late-bound vars (e.g. `for<'a> fn(&'a ())`), they just must not have *escaping* late-bound vars in order to be normalized correctly.

Addresses rust-lang/rust-clippy#11230, cc `@jyn514` and `@matthiaskrgr`

changelog: don't check for late-bound vars, check for escaping bound vars. Addresses rust-lang/rust-clippy#11230
  • Loading branch information
bors authored and LucasSte committed Feb 19, 2024
1 parent 6a30b10 commit 05f142f
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
14 changes: 12 additions & 2 deletions src/tools/clippy/clippy_utils/src/ty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1160,7 +1160,12 @@ pub fn make_normalized_projection<'tcx>(
) -> Option<Ty<'tcx>> {
fn helper<'tcx>(tcx: TyCtxt<'tcx>, param_env: ParamEnv<'tcx>, ty: AliasTy<'tcx>) -> Option<Ty<'tcx>> {
#[cfg(debug_assertions)]
if let Some((i, arg)) = ty.args.iter().enumerate().find(|(_, arg)| arg.has_late_bound_regions()) {
if let Some((i, arg)) = ty
.args
.iter()
.enumerate()
.find(|(_, arg)| arg.has_escaping_bound_vars())
{
debug_assert!(
false,
"args contain late-bound region at index `{i}` which can't be normalized.\n\
Expand Down Expand Up @@ -1233,7 +1238,12 @@ pub fn make_normalized_projection_with_regions<'tcx>(
) -> Option<Ty<'tcx>> {
fn helper<'tcx>(tcx: TyCtxt<'tcx>, param_env: ParamEnv<'tcx>, ty: AliasTy<'tcx>) -> Option<Ty<'tcx>> {
#[cfg(debug_assertions)]
if let Some((i, arg)) = ty.args.iter().enumerate().find(|(_, arg)| arg.has_late_bound_regions()) {
if let Some((i, arg)) = ty
.args
.iter()
.enumerate()
.find(|(_, arg)| arg.has_escaping_bound_vars())
{
debug_assert!(
false,
"args contain late-bound region at index `{i}` which can't be normalized.\n\
Expand Down
6 changes: 6 additions & 0 deletions src/tools/clippy/tests/ui/crashes/ice-11230.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/// Test for https://github.com/rust-lang/rust-clippy/issues/11230

fn main() {
const A: &[for<'a> fn(&'a ())] = &[];
for v in A.iter() {}
}

0 comments on commit 05f142f

Please sign in to comment.