//@ aux-build:repeat.rs

#![allow(unused)]

// This tests the allocating algo branch of the
// inherent impls overlap checker.
// This branch was added by PR:
// https://github.com/rust-lang/rust/pull/78317
// In this test, we repeat many impl blocks
// to trigger the allocating branch.

// Simple overlap

extern crate repeat;

struct Foo {}

repeat::repeat_with_idents!(impl Foo { fn IDENT() {} });

impl Foo { fn hello() {} } //~ERROR duplicate definitions with name `hello`
impl Foo { fn hello() {} }

// Transitive overlap

struct Foo2 {}

repeat::repeat_with_idents!(impl Foo2 { fn IDENT() {} });

impl Foo2 {
    fn bar() {}
    fn hello2() {} //~ERROR duplicate definitions with name `hello2`
}

impl Foo2 {
    fn baz() {}
    fn hello2() {}
}

// Slightly stronger transitive overlap

struct Foo3 {}

repeat::repeat_with_idents!(impl Foo3 { fn IDENT() {} });

impl Foo3 {
    fn bar() {} //~ERROR duplicate definitions with name `bar`
    fn hello3() {} //~ERROR duplicate definitions with name `hello3`
}

impl Foo3 {
    fn bar() {}
    fn hello3() {}
}

// Generic overlap

struct Bar<T>(T);

struct A;
struct B;

repeat::repeat_with_idents!(impl Bar<A> { fn IDENT() {} });

impl Bar<A> { fn foo() {} fn bar2() {} }
impl Bar<B> {
    fn foo() {}
    fn bar2() {} //~ERROR duplicate definitions with name `bar2`
}
impl Bar<B> { fn bar2() {} }

fn main() {}
