How does Rust compiler identify the trait bound for generic parameter?

Hi, I am playing Rust Compiler Internals at the MIR level. However, I don't understand how to get the trait bound applied to the generic parameter. For example,

impl<T: trait2> trait1 for [T] {
    fn function1(&self) -> return_ty {
        // resolved implementation
        std::mem::transmute(self)
    }
}

impl trait_bnd for u8 {}
impl trait_bnd for i8 {}

When I visited mir::statement of the method function1 defined in the trait1, I found that T was considered TyKind::Param which could be an arbitrary type. However, it was actually not any type because T had a trait bound for trait2. Therefore, T could only be u8 and i8 (if we assume trait2 is sealed).

Back to the problem: How do I know T is bound to trait2 (or how could I know T should be u8/i8?) when I visit the function1 at the MIR level?

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.