let name_and_namespace = |def_id| {
let item = self.tcx.associated_item(def_id);
- (item.ident, Namespace::from(item.kind))
+ (item.ident.modern(), Namespace::from(item.kind))
};
let impl_items1 = self.tcx.associated_item_def_ids(impl1);
--- /dev/null
+#![feature(decl_macro)]
+
+struct X;
+
+macro_rules! define_f_legacy { () => {
+ fn f() {}
+}}
+macro define_g_modern() {
+ fn g() {}
+}
+
+impl X {
+ fn f() {} //~ ERROR duplicate definitions with name `f`
+ fn g() {} // OK
+}
+impl X {
+ define_f_legacy!();
+}
+impl X {
+ define_g_modern!();
+}
+
+fn main() {}
--- /dev/null
+error[E0592]: duplicate definitions with name `f`
+ --> $DIR/specialization-overlap-hygiene.rs:13:4
+ |
+LL | fn f() {}
+ | --------- other definition for `f`
+...
+LL | fn f() {}
+ | ^^^^^^^^^ duplicate definitions for `f`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0592`.