diff options
| author | bors <bors@rust-lang.org> | 2016-09-06 20:06:34 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-09-06 20:06:34 -0700 |
| commit | fe278a8a3218fd83d8bf21e82e2c0cc975d2fb64 (patch) | |
| tree | 049b0812007f7a663f6acbda56e33f459a66e840 /src | |
| parent | 3b272bf3102afd739d3e7284b898fa42fa1bd64e (diff) | |
| parent | 046c7f23680f9a8f24209be4097656f91ade0bbb (diff) | |
| download | rust-fe278a8a3218fd83d8bf21e82e2c0cc975d2fb64.tar.gz rust-fe278a8a3218fd83d8bf21e82e2c0cc975d2fb64.zip | |
Auto merge of #36252 - joshtriplett:union-field-never-used, r=sanxiyn
Fix "field is never used" warning to take unions into account When compiling code containing a union with an unused field, rustc says "struct field is never used". Rather than saying "struct or union", or adding logic to determine the type of the item, just change the message to "field is never used", dropping the "struct". Update tests accordingly.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/middle/dead.rs | 2 | ||||
| -rw-r--r-- | src/test/compile-fail/lint-dead-code-4.rs | 10 | ||||
| -rw-r--r-- | src/test/compile-fail/union/union-lint-dead-code.rs | 26 |
3 files changed, 32 insertions, 6 deletions
diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs index 8cb362c1625..26a89feb218 100644 --- a/src/librustc/middle/dead.rs +++ b/src/librustc/middle/dead.rs @@ -548,7 +548,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for DeadVisitor<'a, 'tcx> { fn visit_struct_field(&mut self, field: &hir::StructField) { if self.should_warn_about_field(&field) { self.warn_dead_code(field.id, field.span, - field.name, "struct field"); + field.name, "field"); } intravisit::walk_struct_field(self, field); diff --git a/src/test/compile-fail/lint-dead-code-4.rs b/src/test/compile-fail/lint-dead-code-4.rs index 20cd13c1875..3df089fc200 100644 --- a/src/test/compile-fail/lint-dead-code-4.rs +++ b/src/test/compile-fail/lint-dead-code-4.rs @@ -14,7 +14,7 @@ struct Foo { x: usize, - b: bool, //~ ERROR: struct field is never used + b: bool, //~ ERROR: field is never used } fn field_read(f: Foo) -> usize { @@ -46,8 +46,8 @@ enum IJK { I, //~ ERROR variant is never used J { a: String, - b: i32, //~ ERROR struct field is never used - c: i32, //~ ERROR struct field is never used + b: i32, //~ ERROR field is never used + c: i32, //~ ERROR field is never used }, K //~ ERROR variant is never used @@ -68,9 +68,9 @@ fn field_match_in_patterns(b: XYZ) -> String { } struct Bar { - x: usize, //~ ERROR: struct field is never used + x: usize, //~ ERROR: field is never used b: bool, - c: bool, //~ ERROR: struct field is never used + c: bool, //~ ERROR: field is never used _guard: () } diff --git a/src/test/compile-fail/union/union-lint-dead-code.rs b/src/test/compile-fail/union/union-lint-dead-code.rs new file mode 100644 index 00000000000..7a552c8f8b7 --- /dev/null +++ b/src/test/compile-fail/union/union-lint-dead-code.rs @@ -0,0 +1,26 @@ +// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(untagged_unions)] +#![deny(dead_code)] + +union Foo { + x: usize, + b: bool, //~ ERROR: field is never used + _unused: u16, +} + +fn field_read(f: Foo) -> usize { + unsafe { f.x } +} + +fn main() { + let _ = field_read(Foo { x: 2 }); +} |
