]> git.lizzy.rs Git - rust.git/commitdiff
hygiene: Fix identifier comparison in impl overlap check
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Tue, 5 Mar 2019 19:34:37 +0000 (22:34 +0300)
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Thu, 21 Mar 2019 19:20:10 +0000 (22:20 +0300)
src/librustc_typeck/coherence/inherent_impls_overlap.rs
src/test/ui/specialization/specialization-overlap-hygiene.rs [new file with mode: 0644]
src/test/ui/specialization/specialization-overlap-hygiene.stderr [new file with mode: 0644]

index 832c172e97c18e79f089d82e1fbc47558f864b41..d0156db32e9485cda1d790a90e9ef6fa229b272b 100644 (file)
@@ -25,7 +25,7 @@ fn check_for_common_items_in_impls(&self, impl1: DefId, impl2: DefId,
 
         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);
diff --git a/src/test/ui/specialization/specialization-overlap-hygiene.rs b/src/test/ui/specialization/specialization-overlap-hygiene.rs
new file mode 100644 (file)
index 0000000..93e7c83
--- /dev/null
@@ -0,0 +1,23 @@
+#![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() {}
diff --git a/src/test/ui/specialization/specialization-overlap-hygiene.stderr b/src/test/ui/specialization/specialization-overlap-hygiene.stderr
new file mode 100644 (file)
index 0000000..6adf16d
--- /dev/null
@@ -0,0 +1,12 @@
+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`.