diff options
| -rw-r--r-- | src/comp/middle/typeck.rs | 7 | ||||
| -rw-r--r-- | src/test/compile-fail/iface-impl-different-num-params.rs | 11 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs index 6a49e288701..f80e20bd701 100644 --- a/src/comp/middle/typeck.rs +++ b/src/comp/middle/typeck.rs @@ -620,6 +620,13 @@ fn compare_impl_method(tcx: ty::ctxt, sp: span, impl_m: ty::method, tcx.sess.span_err(sp, "method `" + if_m.ident + "` has an incompatible set of type parameters"); ty::mk_fn(tcx, impl_m.fty) + } else if vec::len(impl_m.fty.inputs) != vec::len(if_m.fty.inputs) { + tcx.sess.span_err(sp,#fmt["method `%s`` has %u parameters \ + but the iface has %u", + if_m.ident, + vec::len(impl_m.fty.inputs), + vec::len(if_m.fty.inputs)]); + ty::mk_fn(tcx, impl_m.fty) } else { let auto_modes = vec::map2(impl_m.fty.inputs, if_m.fty.inputs, {|i, f| alt ty::get(f.ty).struct { diff --git a/src/test/compile-fail/iface-impl-different-num-params.rs b/src/test/compile-fail/iface-impl-different-num-params.rs new file mode 100644 index 00000000000..979871b3cd7 --- /dev/null +++ b/src/test/compile-fail/iface-impl-different-num-params.rs @@ -0,0 +1,11 @@ +iface foo { + fn bar(x: uint) -> self; +} +impl of foo for int { + fn bar() -> int { + self + } +} + +fn main() { +} |
