// 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); struct A; struct B; repeat::repeat_with_idents!(impl Bar { fn IDENT() {} }); impl Bar { fn foo() {} fn bar2() {} } impl Bar { fn foo() {} fn bar2() {} //~ERROR duplicate definitions with name `bar2` } impl Bar { fn bar2() {} } fn main() {}