about summary refs log tree commit diff
path: root/src/rustc/middle
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2012-04-18 16:11:12 +0200
committerMarijn Haverbeke <marijnh@gmail.com>2012-04-18 17:21:39 +0200
commitfda7bb672134257c0466cd6b7bbf738963d2a130 (patch)
treed0998df70e52005d6e17d84fa386d5d9a6046edb /src/rustc/middle
parent73ea690016452d7c7d732d0fd6940d6271411606 (diff)
Fix oversight in type_use.rs
Closes #2053
Diffstat (limited to 'src/rustc/middle')
-rw-r--r--src/rustc/middle/trans/type_use.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/rustc/middle/trans/type_use.rs b/src/rustc/middle/trans/type_use.rs
index 232a8cda48f..c7f09c9dc5f 100644
--- a/src/rustc/middle/trans/type_use.rs
+++ b/src/rustc/middle/trans/type_use.rs
@@ -180,6 +180,21 @@ fn mark_for_expr(cx: ctx, e: @expr) {
         // after the chosen field
         let base_ty = ty::node_id_to_type(cx.ccx.tcx, base.id);
         type_needs(cx, use_repr, ty::type_autoderef(cx.ccx.tcx, base_ty));
+
+        option::iter(cx.ccx.maps.method_map.find(e.id)) {|mth|
+            alt mth {
+              typeck::method_static(did) {
+                option::iter(cx.ccx.tcx.node_type_substs.find(e.id)) {|ts|
+                    vec::iter2(type_uses_for(cx.ccx, did, ts.len()), ts)
+                        {|uses, subst| type_needs(cx, uses, subst)}
+                }
+              }
+              typeck::method_param(_, _, param, _) {
+                cx.uses[param] |= use_tydesc;
+              }
+              typeck::method_iface(_, _) {}
+            }
+        }
       }
       expr_log(_, _, val) {
         node_type_needs(cx, use_tydesc, val.id);