Skip to content

alias-bounds for normalizable alias + deeply normalize ~> MIR typeck ICE #77

@lcnr

Description

@lcnr
trait Trait {
    type Assoc: Clone;
}

fn is_clone<T: Clone>(_: *mut T) {}

fn foo<T: Trait<Assoc = U>, U>(x: *mut <T as Trait>::Assoc) {
    is_clone(x);
}

https://rust.godbolt.org/z/4WojT7KTW

This currently results in an ICE:

  • in HIR typeck <T as Trait>::Assoc: Clone holds due to the alias bound candidate
  • during writeback we deeply normalize, replacing <T as Trait>::Assoc with U
  • MIR typeck checks U: Clone which does not hold, resulting in an ICE

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions