Skip to content

"escaping bound vars in predicate" with associated_type_bounds, HRTB #70292

Closed
@comex

Description

@comex

Playground link

#![feature(unboxed_closures, associated_type_bounds)]

fn foo<F>(f: F) where
    F: for<'a> FnOnce<(&'a i32,), Output: 'a> {}

fn main() {
    foo(|x: &i32| -> &i32 { x });
}

produces:

error: internal compiler error: src/librustc_typeck/check/mod.rs:692: escaping bound vars in predicate Obligation(predicate=Binder(OutlivesPredicate(_, ReLateBound(DebruijnIndex(1), BrNamed(DefId(0:5 ~ playground[eb44]::foo[0]::'a[0]), 'a)))), depth=0)
 --> src/main.rs:7:5
  |
7 |     foo(|x: &i32| -> &i32 { x }); // OK
  |     ^^^

This does not happen if written out in this form, even though I think it should be equivalent:

    F: for<'a> FnOnce<(&'a i32,)>,
    for<'a> <F as FnOnce<(&'a i32,)>>::Output: 'a,

May or may not be related to #70263.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-associated-itemsArea: Associated items (types, constants & functions)C-bugCategory: This is a bug.E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.F-associated_type_bounds`#![feature(associated_type_bounds)]`I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️P-mediumMedium priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.glacierICE tracked in rust-lang/glacier.requires-nightlyThis issue requires a nightly compiler in some way.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions