fn compute_components<'tcx>(
    tcx: TyCtxt<'tcx>,
    ty: Ty<'tcx>,
    out: &mut SmallVec<[Component<'tcx>; 4]>,
    visited: &mut SsoHashSet<GenericArg<'tcx>>
)