blob: 6bd7acc3ebef7fae8b6ef7ec2fcd63cf8073892c [file]
// Ensure that we don't enter infinite recursion and trigger a stack overflow when computing the
// variances of items that reference diverging free alias types. This once used to happen in a dev
// version of PR #141030.
//
// This test demonstrates that we cannot rely on wfck bailing out early with a normalization error
// for such free alias types before we reach variance computation. At least at the time of writing,
// we wfck item `First` first which includes variance computation -- at which point item `Second`
// hasn't been wfck'ed yet.
// This means we can't use `type_of` to recurse into free alias types, we do have to use
// `expand_free_alias_tys`.
#![feature(lazy_type_alias)]
// the (unused) type parameter is necessary to actually trigger variance computation for `First`.
struct First<T>(Second);
//~^ ERROR type parameter `T` is never used
//~| ERROR overflow normalizing the type alias `Second`
type Second = Second; // diverging free alias type
//~^ ERROR overflow normalizing the type alias `Second`
fn main() {}