File tree 2 files changed +33
-0
lines changed
2 files changed +33
-0
lines changed Original file line number Diff line number Diff line change @@ -48,6 +48,8 @@ use util::ppaux::Repr;
48
48
use std:: rc:: Rc ;
49
49
use std:: vec_ng:: Vec ;
50
50
use std:: vec_ng;
51
+ use collections:: HashSet ;
52
+
51
53
use syntax:: abi:: AbiSet ;
52
54
use syntax:: ast:: { RegionTyParamBound , TraitTyParamBound } ;
53
55
use syntax:: ast;
@@ -478,7 +480,12 @@ fn convert_methods(ccx: &CrateCtxt,
478
480
rcvr_visibility : ast:: Visibility )
479
481
{
480
482
let tcx = ccx. tcx ;
483
+ let mut seen_methods = HashSet :: new ( ) ;
481
484
for m in ms. iter ( ) {
485
+ if !seen_methods. insert ( m. ident . repr ( ccx. tcx ) ) {
486
+ tcx. sess . span_err ( m. span , "duplicate method in trait impl" ) ;
487
+ }
488
+
482
489
let num_rcvr_ty_params = rcvr_ty_generics. type_param_defs ( ) . len ( ) ;
483
490
let m_ty_generics = ty_generics_for_fn_or_method ( ccx, & m. generics ,
484
491
num_rcvr_ty_params) ;
Original file line number Diff line number Diff line change
1
+ // Copyright 2013 The Rust Project Developers. See the COPYRIGHT
2
+ // file at the top-level directory of this distribution and at
3
+ // http://rust-lang.org/COPYRIGHT.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6
+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7
+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8
+ // option. This file may not be copied, modified, or distributed
9
+ // except according to those terms.
10
+
11
+ // Test that duplicate methods in impls are not allowed
12
+
13
+ struct Foo ;
14
+
15
+ trait Bar {
16
+ fn bar ( & self ) -> int ;
17
+ }
18
+
19
+ impl Bar for Foo {
20
+ fn bar ( & self ) -> int { 1 }
21
+ fn bar ( & self ) -> int { 2 } //~ ERROR duplicate method
22
+ }
23
+
24
+ fn main ( ) {
25
+ println ! ( "{}" , Foo . bar( ) ) ;
26
+ }
You can’t perform that action at this time.
0 commit comments