about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2012-02-12 07:17:42 -0800
committerNiko Matsakis <niko@alum.mit.edu>2012-02-13 06:50:58 -0800
commit4eb52f69a9ebd39af4545fe7583f843edaa1a07d (patch)
tree795180045e1687b23a6e69709f5b8bf8815f0f59
parenta7641e99e8e6830e4242cfe441a867eb6e955694 (diff)
downloadrust-4eb52f69a9ebd39af4545fe7583f843edaa1a07d.tar.gz
rust-4eb52f69a9ebd39af4545fe7583f843edaa1a07d.zip
do not fail if iface/impl method have different number of parameters
-rw-r--r--src/comp/middle/typeck.rs7
-rw-r--r--src/test/compile-fail/iface-impl-different-num-params.rs11
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() {
+}