hygiene: Fix identifier comparison in impl overlap check

This commit is contained in:
Vadim Petrochenkov 2019-03-05 22:34:37 +03:00
parent 89573b3c8b
commit fa013896f7
3 changed files with 36 additions and 1 deletions

View file

@ -25,7 +25,7 @@ impl<'a, 'tcx> InherentOverlapChecker<'a, 'tcx> {
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);

View file

@ -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() {}

View file

@ -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`.