diff options
| author | bors <bors@rust-lang.org> | 2013-12-08 11:51:22 -0800 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-12-08 11:51:22 -0800 |
| commit | a6310f6ad3434a03d5c257db5eae85b7b7522c29 (patch) | |
| tree | cc9478fa0b97bafcbf6b7eab427ae0abca4ca87e /src/libstd/rt/basic.rs | |
| parent | af6010ca0bfc0abf3f9e184cc33b9821c8453916 (diff) | |
| parent | 1755408d1a58684b6c9bce11aeceb18a1ec2d66e (diff) | |
| download | rust-a6310f6ad3434a03d5c257db5eae85b7b7522c29.tar.gz rust-a6310f6ad3434a03d5c257db5eae85b7b7522c29.zip | |
auto merge of #10477 : ktt3ja/rust/dead-code, r=alexcrichton
PR for issue #1749 mainly to get some feedback and suggestion. This adds a pass that warns if a function, struct, enum, or static item is never used. For the following code,
```rust
pub static pub_static: int = 0;
static priv_static: int = 0;
static used_static: int = 0;
pub fn pub_fn() { used_fn(); }
fn priv_fn() { let unused_struct = PrivStruct; }
fn used_fn() {}
pub struct PubStruct();
struct PrivStruct();
struct UsedStruct1 { x: int }
struct UsedStruct2(int);
struct UsedStruct3();
pub enum pub_enum { foo1, bar1 }
enum priv_enum { foo2, bar2 }
enum used_enum { foo3, bar3 }
fn foo() {
bar();
let unused_enum = foo2;
}
fn bar() {
foo();
}
fn main() {
let used_struct1 = UsedStruct1 { x: 1 };
let used_struct2 = UsedStruct2(1);
let used_struct3 = UsedStruct3;
let t = used_static;
let e = foo3;
}
```
it would add the following warnings:
```rust
/home/ktt3ja/test.rs:2:0: 2:28 warning: code is never used: `priv_static`, #[warn(dead_code)] on by default
/home/ktt3ja/test.rs:2 static priv_static: int = 0;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/ktt3ja/test.rs:6:0: 6:48 warning: code is never used: `priv_fn`, #[warn(dead_code)] on by default
/home/ktt3ja/test.rs:6 fn priv_fn() { let unused_struct = PrivStruct; }
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/ktt3ja/test.rs:10:0: 10:20 warning: code is never used: `PrivStruct`, #[warn(dead_code)] on by default
/home/ktt3ja/test.rs:10 struct PrivStruct();
^~~~~~~~~~~~~~~~~~~~
/home/ktt3ja/test.rs:16:0: 16:29 warning: code is never used: `priv_enum`, #[warn(dead_code)] on by default
/home/ktt3ja/test.rs:16 enum priv_enum { foo2, bar2 }
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/ktt3ja/test.rs:19:0: 22:1 warning: code is never used: `foo`, #[warn(dead_code)] on by default
/home/ktt3ja/test.rs:19 fn foo() {
/home/ktt3ja/test.rs:20 bar();
/home/ktt3ja/test.rs:21 let unused_enum = foo2;
/home/ktt3ja/test.rs:22 }
/home/ktt3ja/test.rs:24:0: 26:1 warning: code is never used: `bar`, #[warn(dead_code)] on by default
/home/ktt3ja/test.rs:24 fn bar() {
/home/ktt3ja/test.rs:25 foo();
/home/ktt3ja/test.rs:26 }
```
Furthermore, I would like to solicit some test cases since I haven't tested extensively and I'm still unclear about some of the things in here. For example, I'm not sure how reexports would affect this and just assumed that LiveContext (which is a copy of reachable::ReachableContext) does enough work to handle it. Also, the test case above doesn't include any impl or methods, etc.
Diffstat (limited to 'src/libstd/rt/basic.rs')
| -rw-r--r-- | src/libstd/rt/basic.rs | 22 |
1 files changed, 0 insertions, 22 deletions
diff --git a/src/libstd/rt/basic.rs b/src/libstd/rt/basic.rs index d857f39ceaf..311138d15a2 100644 --- a/src/libstd/rt/basic.rs +++ b/src/libstd/rt/basic.rs @@ -37,17 +37,6 @@ struct BasicLoop { enum Message { RunRemote(uint), RemoveRemote(uint) } -struct Time { - sec: u64, - nsec: u64, -} - -impl Ord for Time { - fn lt(&self, other: &Time) -> bool { - self.sec < other.sec || self.nsec < other.nsec - } -} - impl BasicLoop { fn new() -> BasicLoop { BasicLoop { @@ -238,14 +227,3 @@ impl Drop for BasicPausible { } } } - -fn time() -> Time { - extern { - fn rust_get_time(sec: &mut i64, nsec: &mut i32); - } - let mut sec = 0; - let mut nsec = 0; - unsafe { rust_get_time(&mut sec, &mut nsec) } - - Time { sec: sec as u64, nsec: nsec as u64 } -} |
