From c6f3103006f3e91daf4ffbd026ff64d77f858675 Mon Sep 17 00:00:00 2001 From: Luqman Aden Date: Tue, 11 Jun 2013 14:53:33 -0400 Subject: [PATCH] librustc: Don't allow duplicate methods on impls. --- src/librustc/middle/resolve.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 8c7751c879f..e4be8dac712 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -1226,11 +1226,25 @@ impl Resolver { // the same module that declared the type. // Bail out early if there are no static methods. + let mut methods_seen = HashMap::new(); let mut has_static_methods = false; for methods.each |method| { match method.explicit_self.node { sty_static => has_static_methods = true, - _ => {} + _ => { + // Make sure you can't define duplicate methods + let ident = method.ident; + let span = method.span; + let old_sp = methods_seen.find_or_insert(ident, span); + if *old_sp != span { + self.session.span_err(span, + fmt!("duplicate definition of method %s", + *self.session.str_of(ident))); + self.session.span_note(*old_sp, + fmt!("first definition of method %s here", + *self.session.str_of(ident))); + } + } } }