Skip to content

Commit d5ad32f

Browse files
committed
Check more live Path nodes in dead-code pass
1 parent 64ecb78 commit d5ad32f

File tree

2 files changed

+27
-21
lines changed

2 files changed

+27
-21
lines changed

src/librustc/middle/dead.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,10 @@ impl MarkSymbolVisitor {
6161
}
6262
}
6363

64-
fn lookup_and_handle_definition(&mut self, id: &ast::NodeId,
65-
span: codemap::Span) {
64+
fn lookup_and_handle_definition(&mut self, id: &ast::NodeId) {
6665
let def = match self.tcx.def_map.find(id) {
6766
Some(&def) => def,
68-
None => self.tcx.sess.span_bug(span, "def ID not in def map?!"),
67+
None => return
6968
};
7069
let def_id = match def {
7170
ast::DefVariant(enum_id, _, _) => Some(enum_id),
@@ -129,9 +128,6 @@ impl Visitor<()> for MarkSymbolVisitor {
129128

130129
fn visit_expr(&mut self, expr: @ast::Expr, _: ()) {
131130
match expr.node {
132-
ast::ExprPath(_) | ast::ExprStruct(..) => {
133-
self.lookup_and_handle_definition(&expr.id, expr.span);
134-
}
135131
ast::ExprMethodCall(..) => {
136132
match self.method_map.find(&expr.id) {
137133
Some(&typeck::method_map_entry {
@@ -160,12 +156,16 @@ impl Visitor<()> for MarkSymbolVisitor {
160156
fn visit_ty(&mut self, typ: &ast::Ty, _: ()) {
161157
match typ.node {
162158
ast::ty_path(_, _, ref id) => {
163-
self.lookup_and_handle_definition(id, typ.span);
159+
self.lookup_and_handle_definition(id);
164160
}
165161
_ => visit::walk_ty(self, typ, ()),
166162
}
167163
}
168164

165+
fn visit_path(&mut self, _: &ast::Path, id: ast::NodeId, _: ()) {
166+
self.lookup_and_handle_definition(&id);
167+
}
168+
169169
fn visit_item(&mut self, _item: @ast::item, _: ()) {
170170
// Do not recurse into items. These items will be added to the
171171
// worklist and recursed into manually if necessary.

src/test/compile-fail/lint-dead-code-1.rs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,7 @@ pub static pub_static: int = 0;
2626
static priv_static: int = 0; //~ ERROR: code is never used
2727
static used_static: int = 0;
2828
pub static used_static2: int = used_static;
29-
30-
pub fn pub_fn() {
31-
used_fn();
32-
let used_struct1 = UsedStruct1 { x: 1 };
33-
let used_struct2 = UsedStruct2(1);
34-
let used_struct3 = UsedStruct3;
35-
let e = foo3;
36-
SemiUsedStruct::la_la_la();
37-
38-
}
39-
fn priv_fn() { //~ ERROR: code is never used
40-
let unused_struct = PrivStruct;
41-
}
42-
fn used_fn() {}
29+
static USED_STATIC: int = 0;
4330

4431
pub type typ = ~UsedStruct4;
4532
pub struct PubStruct();
@@ -59,6 +46,25 @@ pub enum pub_enum { foo1, bar1 }
5946
enum priv_enum { foo2, bar2 } //~ ERROR: code is never used
6047
enum used_enum { foo3, bar3 }
6148

49+
pub fn pub_fn() {
50+
used_fn();
51+
let used_struct1 = UsedStruct1 { x: 1 };
52+
let used_struct2 = UsedStruct2(1);
53+
let used_struct3 = UsedStruct3;
54+
let e = foo3;
55+
SemiUsedStruct::la_la_la();
56+
57+
let i = 1;
58+
match i {
59+
USED_STATIC => (),
60+
_ => ()
61+
}
62+
}
63+
fn priv_fn() { //~ ERROR: code is never used
64+
let unused_struct = PrivStruct;
65+
}
66+
fn used_fn() {}
67+
6268
fn foo() { //~ ERROR: code is never used
6369
bar();
6470
let unused_enum = foo2;

0 commit comments

Comments
 (0)