| #![allow(unused_variables)] | |
| #![allow(non_camel_case_types)] | |
| #![allow(clashing_extern_declarations)] | |
| #![deny(dead_code)] | |
| #![crate_type="lib"] | |
| pub use extern_foo as x; | |
| extern "C" { | |
| pub fn extern_foo(); | |
| } | |
| struct Foo; //~ ERROR: struct `Foo` is never constructed | |
| impl Foo { | |
| fn foo(&self) { //~ ERROR: method `foo` is never used | |
| bar() | |
| } | |
| } | |
| fn bar() { //~ ERROR: function `bar` is never used | |
| fn baz() {} | |
| Foo.foo(); | |
| baz(); | |
| } | |
| // no warning | |
| struct Foo2; | |
| impl Foo2 { fn foo2(&self) { bar2() } } | |
| fn bar2() { | |
| fn baz2() {} | |
| Foo2.foo2(); | |
| baz2(); | |
| } | |
| pub fn pub_fn() { | |
| let foo2_struct = Foo2; | |
| foo2_struct.foo2(); | |
| blah::baz(); | |
| } | |
| mod blah { | |
| // not warned because it's used in the parameter of `free` and return of | |
| // `malloc` below, which are also used. | |
| enum c_void {} | |
| extern "C" { | |
| fn free(p: *const c_void); | |
| fn malloc(size: usize) -> *const c_void; | |
| } | |
| pub fn baz() { | |
| unsafe { free(malloc(4)); } | |
| } | |
| } | |
| enum c_void {} //~ ERROR: enum `c_void` is never used | |
| extern "C" { | |
| fn free(p: *const c_void); //~ ERROR: function `free` is never used | |
| } | |
| // Check provided method | |
| mod inner { | |
| pub trait Trait { | |
| fn f(&self) { f(); } | |
| } | |
| impl Trait for isize {} | |
| fn f() {} | |
| } | |
| fn anon_const() -> [(); { | |
| fn blah() {} //~ ERROR: function `blah` is never used | |
| 1 | |
| }] { | |
| [(); { | |
| fn blah() {} //~ ERROR: function `blah` is never used | |
| 1 | |
| }] | |
| } | |
| pub fn foo() { | |
| let a: &dyn inner::Trait = &1_isize; | |
| a.f(); | |
| anon_const(); | |
| } |