diff --git a/src/librustc/middle/trans/meth.rs b/src/librustc/middle/trans/meth.rs
index d54dd23af96..ae756aa75ac 100644
--- a/src/librustc/middle/trans/meth.rs
+++ b/src/librustc/middle/trans/meth.rs
@@ -630,11 +630,8 @@ fn emit_vtable_methods(bcx: @Block,
         debug!("(making impl vtable) emitting method {} at subst {}",
                m.repr(tcx),
                substs.repr(tcx));
-        let fty = ty::subst_tps(tcx,
-                                substs,
-                                None,
-                                ty::mk_bare_fn(tcx, m.fty.clone()));
-        if m.generics.has_type_params() || ty::type_has_self(fty) {
+        if m.generics.has_type_params() ||
+           ty::type_has_self(ty::mk_bare_fn(tcx, m.fty.clone())) {
             debug!("(making impl vtable) method has self or type params: {}",
                    tcx.sess.str_of(ident));
             C_null(Type::nil().ptr_to())
diff --git a/src/test/run-pass/trait-cast-generic.rs b/src/test/run-pass/trait-cast-generic.rs
new file mode 100644
index 00000000000..af9633d679e
--- /dev/null
+++ b/src/test/run-pass/trait-cast-generic.rs
@@ -0,0 +1,30 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// Testing casting of a generic Struct to a Trait with a generic method.
+// This is test for issue 10955.
+#[allow(unused_variable)];
+
+trait Foo {
+    fn f<A>(a: A) -> A {
+        a
+    }
+}
+
+struct Bar<T> {
+    x: T,
+}
+
+impl<T> Foo for Bar<T> { }
+
+pub fn main() {
+    let a = Bar { x: 1 };
+    let b = &a as &Foo;
+}