diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-04-09 15:55:02 -0700 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-04-09 16:36:59 -0700 |
| commit | 24e921f7d4ec44c050ac0d767ecec9832bbd8116 (patch) | |
| tree | 959f8afef81d1d71c1de935e3cf6fa6d0869ecd9 | |
| parent | 564d8e09c725ccd773e27e6d0edc8fa0a163bf6d (diff) | |
| download | rust-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.rs | 6 | ||||
| -rw-r--r-- | src/test/auxiliary/issue2170lib.rs | 8 | ||||
| -rw-r--r-- | src/test/run-pass/issue2170exe.rs | 7 |
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); +} |
