about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2012-04-09 15:55:02 -0700
committerNiko Matsakis <niko@alum.mit.edu>2012-04-09 16:36:59 -0700
commit24e921f7d4ec44c050ac0d767ecec9832bbd8116 (patch)
tree959f8afef81d1d71c1de935e3cf6fa6d0869ecd9
parent564d8e09c725ccd773e27e6d0edc8fa0a163bf6d (diff)
downloadrust-24e921f7d4ec44c050ac0d767ecec9832bbd8116.tar.gz
rust-24e921f7d4ec44c050ac0d767ecec9832bbd8116.zip
make anything used in a resource body always reachable
(they appear to be uncond. inlined)

Fixes #2170.
-rw-r--r--src/rustc/middle/trans/reachable.rs6
-rw-r--r--src/test/auxiliary/issue2170lib.rs8
-rw-r--r--src/test/run-pass/issue2170exe.rs7
3 files changed, 20 insertions, 1 deletions
diff --git a/src/rustc/middle/trans/reachable.rs b/src/rustc/middle/trans/reachable.rs
index 6e522196343..3a462ff7392 100644
--- a/src/rustc/middle/trans/reachable.rs
+++ b/src/rustc/middle/trans/reachable.rs
@@ -84,7 +84,11 @@ fn traverse_public_item(cx: ctx, item: @item) {
               for vec::each(nm.items) {|item| cx.rmap.insert(item.id, ()); }
           }
       }
-      item_res(_, tps, blk, _, _) | item_fn(_, tps, blk) {
+      item_res(_, tps, blk, _, _) {
+        // resources seem to be unconditionally inlined
+        traverse_inline_body(cx, blk);
+      }
+      item_fn(_, tps, blk) {
         if tps.len() > 0u ||
            attr::find_inline_attr(item.attrs) != attr::ia_none {
             traverse_inline_body(cx, blk);
diff --git a/src/test/auxiliary/issue2170lib.rs b/src/test/auxiliary/issue2170lib.rs
new file mode 100644
index 00000000000..50f424594c9
--- /dev/null
+++ b/src/test/auxiliary/issue2170lib.rs
@@ -0,0 +1,8 @@
+export rsrc;
+
+fn foo(_x: i32) {
+}
+
+resource rsrc(x: i32) {
+    foo(x);
+}
\ No newline at end of file
diff --git a/src/test/run-pass/issue2170exe.rs b/src/test/run-pass/issue2170exe.rs
new file mode 100644
index 00000000000..34e51843070
--- /dev/null
+++ b/src/test/run-pass/issue2170exe.rs
@@ -0,0 +1,7 @@
+// xfail-fast - check-fail fast doesn't under aux-build
+// aux-build:issue2170lib.rs
+use issue2170lib;
+
+fn main() {
+    let _ = issue2170lib::rsrc(2i32);
+}