//@ run-pass //@ check-run-results #![feature(supertrait_item_shadowing)] #![warn(supertrait_item_shadowing_usage)] #![warn(supertrait_item_shadowing_definition)] #![allow(dead_code)] trait A { fn hello(&self) { println!("A"); } } impl A for T {} trait B { fn hello(&self) { println!("B"); } } impl B for T {} trait C: A + B { fn hello(&self) { //~^ WARN trait item `hello` from `C` shadows identically named item println!("C"); } } impl C for T {} // `D` extends `C` which extends `B` and `A` trait D: C { fn hello(&self) { //~^ WARN trait item `hello` from `D` shadows identically named item println!("D"); } } impl D for T {} fn main() { ().hello(); //~^ WARN trait item `hello` from `D` shadows identically named item from supertrait }