Skip to content

nll insufficiently checks wf boundsΒ #95275

Open

Description

#![feature(nll)]

trait Trait {
    const ASSOC: usize;
}

struct Foo<'a, 'b: 'a>(&'a &'b ());
impl<'a, 'b> Trait for Foo<'a, 'b> {
    const ASSOC: usize = 3;
}
fn foo<'a, 'b>() -> usize {
    <Foo<'a, 'b> as Trait>::ASSOC
}

should error because 'b: 'a is not met but needed by Foo<'a, 'b>::ASSOC.
This happens because the predicates of constants are only checked for function definitions
while they have to also get checked for associated constants. I feel like we should really
just check the predicates for all constants instead of trying to safe some work here.

if let ty::FnDef(def_id, substs) = *constant.literal.ty().kind() {
let instantiated_predicates = tcx.predicates_of(def_id).instantiate(tcx, substs);
self.cx.normalize_and_prove_instantiated_predicates(
def_id,
instantiated_predicates,
location.to_locations(),
);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    A-NLLArea: Non-lexical lifetimes (NLL)Area: Non-lexical lifetimes (NLL)C-bugCategory: This is a bug.Category: This is a bug.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions