diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs index 77270d10810..0cec26d339c 100644 --- a/src/librustc/lib.rs +++ b/src/librustc/lib.rs @@ -47,6 +47,7 @@ #![feature(core_intrinsics)] #![feature(i128_type)] #![cfg_attr(windows, feature(libc))] +#![feature(macro_vis_matcher)] #![feature(never_type)] #![feature(nonzero)] #![feature(quote)] diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs index d28963fc726..855cc069d11 100644 --- a/src/librustc/lint/builtin.rs +++ b/src/librustc/lint/builtin.rs @@ -106,12 +106,6 @@ declare_lint! { "unknown crate type found in #[crate_type] directive" } -declare_lint! { - pub FAT_PTR_TRANSMUTES, - Allow, - "detects transmutes of fat pointers" -} - declare_lint! { pub TRIVIAL_CASTS, Allow, @@ -250,7 +244,6 @@ impl LintPass for HardwiredLints { UNUSED_FEATURES, STABLE_FEATURES, UNKNOWN_CRATE_TYPES, - FAT_PTR_TRANSMUTES, TRIVIAL_CASTS, TRIVIAL_NUMERIC_CASTS, PRIVATE_IN_PUBLIC, diff --git a/src/librustc/lint/mod.rs b/src/librustc/lint/mod.rs index 42b5e2dd83d..52dcbfdedef 100644 --- a/src/librustc/lint/mod.rs +++ b/src/librustc/lint/mod.rs @@ -84,29 +84,16 @@ impl Lint { } } -/// Build a `Lint` initializer. -#[macro_export] -macro_rules! lint_initializer { - ($name:ident, $level:ident, $desc:expr) => ( - ::rustc::lint::Lint { - name: stringify!($name), - default_level: ::rustc::lint::$level, - desc: $desc, - } - ) -} - /// Declare a static item of type `&'static Lint`. #[macro_export] macro_rules! declare_lint { - (pub $name:ident, $level:ident, $desc:expr) => ( - pub static $name: &'static ::rustc::lint::Lint - = &lint_initializer!($name, $level, $desc); - ); - ($name:ident, $level:ident, $desc:expr) => ( - static $name: &'static ::rustc::lint::Lint - = &lint_initializer!($name, $level, $desc); - ); + ($vis: vis $NAME: ident, $Level: ident, $desc: expr) => ( + $vis static $NAME: &$crate::lint::Lint = &$crate::lint::Lint { + name: stringify!($NAME), + default_level: $crate::lint::$Level, + desc: $desc + }; + ) } /// Declare a static `LintArray` and return it as an expression. diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs index bc2a1f08441..70cac419648 100644 --- a/src/librustc_lint/builtin.rs +++ b/src/librustc_lint/builtin.rs @@ -621,12 +621,6 @@ impl EarlyLintPass for AnonymousParameters { } } -declare_lint! { - DEPRECATED_ATTR, - Warn, - "detects use of deprecated attributes" -} - /// Checks for use of attributes which have been deprecated. #[derive(Clone)] pub struct DeprecatedAttr { @@ -645,7 +639,7 @@ impl DeprecatedAttr { impl LintPass for DeprecatedAttr { fn get_lints(&self) -> LintArray { - lint_array!(DEPRECATED_ATTR) + lint_array!() } } diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs index 4ba7f7aa951..42fcf377d65 100644 --- a/src/librustc_lint/lib.rs +++ b/src/librustc_lint/lib.rs @@ -28,6 +28,7 @@ #![feature(box_patterns)] #![feature(box_syntax)] #![feature(i128_type)] +#![feature(macro_vis_matcher)] #![feature(quote)] #![feature(rustc_diagnostic_macros)] #![feature(slice_patterns)] @@ -163,7 +164,12 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) { UNUSED_UNSAFE, PATH_STATEMENTS, UNUSED_ATTRIBUTES, - UNUSED_MACROS); + UNUSED_MACROS, + UNUSED_ALLOCATION, + UNUSED_DOC_COMMENT, + UNUSED_EXTERN_CRATES, + UNUSED_FEATURES, + UNUSED_PARENS); // Guidelines for creating a future incompatibility lint: // @@ -239,15 +245,15 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) { // Register renamed and removed lints store.register_renamed("unknown_features", "unused_features"); - store.register_removed("unsigned_negation", - "replaced by negate_unsigned feature gate"); + store.register_removed("unsigned_negation", "replaced by negate_unsigned feature gate"); store.register_removed("negate_unsigned", "cast a signed value instead"); store.register_removed("raw_pointer_derive", "using derive with raw pointers is ok"); // This was renamed to raw_pointer_derive, which was then removed, // so it is also considered removed - store.register_removed("raw_pointer_deriving", - "using derive with raw pointers is ok"); + store.register_removed("raw_pointer_deriving", "using derive with raw pointers is ok"); store.register_removed("drop_with_repr_extern", "drop flags have been removed"); + store.register_removed("fat_ptr_transmutes", "was accidentally removed back in 2014"); + store.register_removed("deprecated_attr", "use `deprecated` instead"); store.register_removed("transmute_from_fn_item_types", "always cast functions before transmuting them"); store.register_removed("hr_lifetime_in_assoc_type", diff --git a/src/librustc_lint/unused.rs b/src/librustc_lint/unused.rs index a058f84e588..32f724f7541 100644 --- a/src/librustc_lint/unused.rs +++ b/src/librustc_lint/unused.rs @@ -225,7 +225,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnusedAttributes { } declare_lint! { - UNUSED_PARENS, + pub(super) UNUSED_PARENS, Warn, "`if`, `match`, `while` and `return` do not need parentheses" } @@ -350,7 +350,7 @@ impl EarlyLintPass for UnusedImportBraces { } declare_lint! { - UNUSED_ALLOCATION, + pub(super) UNUSED_ALLOCATION, Warn, "detects unnecessary allocations that can be eliminated" } diff --git a/src/librustc_passes/consts.rs b/src/librustc_passes/consts.rs index d3202ba4ab5..a6eaff4481c 100644 --- a/src/librustc_passes/consts.rs +++ b/src/librustc_passes/consts.rs @@ -140,8 +140,7 @@ impl<'a, 'gcx> CheckCrateVisitor<'a, 'gcx> { self.tcx.lint_node(CONST_ERR, expr.id, expr.span, - &format!("constant evaluation error: {}. This will \ - become a HARD ERROR in the future", + &format!("constant evaluation error: {}", err.description().into_oneline())); } } diff --git a/src/test/compile-fail-fulldeps/auxiliary/lint_for_crate.rs b/src/test/compile-fail-fulldeps/auxiliary/lint_for_crate.rs index fc53031e7f2..d3f921e0878 100644 --- a/src/test/compile-fail-fulldeps/auxiliary/lint_for_crate.rs +++ b/src/test/compile-fail-fulldeps/auxiliary/lint_for_crate.rs @@ -12,6 +12,7 @@ #![feature(plugin_registrar, rustc_private)] #![feature(box_syntax)] +#![feature(macro_vis_matcher)] #[macro_use] extern crate rustc; extern crate rustc_plugin; diff --git a/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs b/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs index 490aa0d4693..a0c72243d48 100644 --- a/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs +++ b/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs @@ -12,6 +12,7 @@ #![feature(plugin_registrar)] #![feature(box_syntax, rustc_private)] +#![feature(macro_vis_matcher)] // Load rustc as a plugin to get macros #[macro_use] diff --git a/src/test/compile-fail-fulldeps/auxiliary/lint_plugin_test.rs b/src/test/compile-fail-fulldeps/auxiliary/lint_plugin_test.rs index 8647797270f..cbbfbd80603 100644 --- a/src/test/compile-fail-fulldeps/auxiliary/lint_plugin_test.rs +++ b/src/test/compile-fail-fulldeps/auxiliary/lint_plugin_test.rs @@ -12,6 +12,7 @@ #![feature(plugin_registrar)] #![feature(box_syntax, rustc_private)] +#![feature(macro_vis_matcher)] extern crate syntax; diff --git a/src/test/compile-fail/const-eval-overflow.rs b/src/test/compile-fail/const-eval-overflow.rs index 3c688d58fd1..058a8d0a1bd 100644 --- a/src/test/compile-fail/const-eval-overflow.rs +++ b/src/test/compile-fail/const-eval-overflow.rs @@ -82,7 +82,7 @@ const VALS_I64: (i64, i64, i64, i64) = ); const VALS_U8: (u8, u8, u8, u8) = - ( //~ WARN constant evaluation error: attempt to subtract with overflow. + ( //~ WARN constant evaluation error: attempt to subtract with overflow -(u8::MIN as i8) as u8, u8::MIN - 1, //~^ ERROR constant evaluation error @@ -96,7 +96,7 @@ const VALS_U8: (u8, u8, u8, u8) = ); const VALS_U16: (u16, u16, u16, u16) = - ( //~ WARN constant evaluation error: attempt to subtract with overflow. + ( //~ WARN constant evaluation error: attempt to subtract with overflow -(u16::MIN as i16) as u16, u16::MIN - 1, //~^ ERROR constant evaluation error @@ -110,7 +110,7 @@ const VALS_U16: (u16, u16, u16, u16) = ); const VALS_U32: (u32, u32, u32, u32) = - ( //~ WARN constant evaluation error: attempt to subtract with overflow. + ( //~ WARN constant evaluation error: attempt to subtract with overflow -(u32::MIN as i32) as u32, u32::MIN - 1, //~^ ERROR constant evaluation error @@ -124,7 +124,7 @@ const VALS_U32: (u32, u32, u32, u32) = ); const VALS_U64: (u64, u64, u64, u64) = - ( //~ WARN constant evaluation error: attempt to subtract with overflow. + ( //~ WARN constant evaluation error: attempt to subtract with overflow -(u64::MIN as i64) as u64, u64::MIN - 1, //~^ ERROR constant evaluation error diff --git a/src/test/run-pass-fulldeps/auxiliary/lint_for_crate.rs b/src/test/run-pass-fulldeps/auxiliary/lint_for_crate.rs index fc53031e7f2..d3f921e0878 100644 --- a/src/test/run-pass-fulldeps/auxiliary/lint_for_crate.rs +++ b/src/test/run-pass-fulldeps/auxiliary/lint_for_crate.rs @@ -12,6 +12,7 @@ #![feature(plugin_registrar, rustc_private)] #![feature(box_syntax)] +#![feature(macro_vis_matcher)] #[macro_use] extern crate rustc; extern crate rustc_plugin; diff --git a/src/test/run-pass-fulldeps/proc-macro/auxiliary/issue-40001-plugin.rs b/src/test/run-pass-fulldeps/proc-macro/auxiliary/issue-40001-plugin.rs index cf1a631937b..29b6cc012b3 100644 --- a/src/test/run-pass-fulldeps/proc-macro/auxiliary/issue-40001-plugin.rs +++ b/src/test/run-pass-fulldeps/proc-macro/auxiliary/issue-40001-plugin.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. #![feature(box_syntax, plugin, plugin_registrar, rustc_private)] +#![feature(macro_vis_matcher)] #![crate_type = "dylib"] #[macro_use] diff --git a/src/test/ui-fulldeps/auxiliary/lint_group_plugin_test.rs b/src/test/ui-fulldeps/auxiliary/lint_group_plugin_test.rs index 490aa0d4693..a0c72243d48 100644 --- a/src/test/ui-fulldeps/auxiliary/lint_group_plugin_test.rs +++ b/src/test/ui-fulldeps/auxiliary/lint_group_plugin_test.rs @@ -12,6 +12,7 @@ #![feature(plugin_registrar)] #![feature(box_syntax, rustc_private)] +#![feature(macro_vis_matcher)] // Load rustc as a plugin to get macros #[macro_use] diff --git a/src/test/ui-fulldeps/auxiliary/lint_plugin_test.rs b/src/test/ui-fulldeps/auxiliary/lint_plugin_test.rs index 8647797270f..cbbfbd80603 100644 --- a/src/test/ui-fulldeps/auxiliary/lint_plugin_test.rs +++ b/src/test/ui-fulldeps/auxiliary/lint_plugin_test.rs @@ -12,6 +12,7 @@ #![feature(plugin_registrar)] #![feature(box_syntax, rustc_private)] +#![feature(macro_vis_matcher)] extern crate syntax; diff --git a/src/test/ui/const-eval/issue-43197.stderr b/src/test/ui/const-eval/issue-43197.stderr index 5ff80060eac..58dedcfd9b1 100644 --- a/src/test/ui/const-eval/issue-43197.stderr +++ b/src/test/ui/const-eval/issue-43197.stderr @@ -1,4 +1,4 @@ -warning: constant evaluation error: attempt to subtract with overflow. This will become a HARD ERROR in the future +warning: constant evaluation error: attempt to subtract with overflow --> $DIR/issue-43197.rs:18:20 | 18 | const X: u32 = 0-1; @@ -6,7 +6,7 @@ warning: constant evaluation error: attempt to subtract with overflow. This will | = note: #[warn(const_err)] on by default -warning: constant evaluation error: attempt to subtract with overflow. This will become a HARD ERROR in the future +warning: constant evaluation error: attempt to subtract with overflow --> $DIR/issue-43197.rs:19:20 | 19 | const Y: u32 = foo(0-1); diff --git a/src/test/ui/lint/suggestions.rs b/src/test/ui/lint/suggestions.rs index e078056ab5e..bf2b5769bf8 100644 --- a/src/test/ui/lint/suggestions.rs +++ b/src/test/ui/lint/suggestions.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![warn(unused_mut)] // UI tests pass `-A unused`—see Issue #43896 +#![warn(unused_mut, unused_parens)] // UI tests pass `-A unused`—see Issue #43896 #![feature(no_debug)] #[no_mangle] static SHENZHOU: usize = 1; // should suggest `pub` diff --git a/src/test/ui/lint/suggestions.stderr b/src/test/ui/lint/suggestions.stderr index 7a498b56413..a0014666836 100644 --- a/src/test/ui/lint/suggestions.stderr +++ b/src/test/ui/lint/suggestions.stderr @@ -4,7 +4,11 @@ warning: unnecessary parentheses around assigned value 30 | let mut a = (1); // should suggest no `mut`, no parens | ^^^ help: remove these parentheses | - = note: #[warn(unused_parens)] on by default +note: lint level defined here + --> $DIR/suggestions.rs:11:21 + | +11 | #![warn(unused_mut, unused_parens)] // UI tests pass `-A unused`—see Issue #43896 + | ^^^^^^^^^^^^^ warning: use of deprecated attribute `no_debug`: the `#[no_debug]` attribute was an experimental feature that has been deprecated due to lack of demand. See https://github.com/rust-lang/rust/issues/29721 --> $DIR/suggestions.rs:27:1 @@ -25,7 +29,7 @@ warning: variable does not need to be mutable note: lint level defined here --> $DIR/suggestions.rs:11:9 | -11 | #![warn(unused_mut)] // UI tests pass `-A unused`—see Issue #43896 +11 | #![warn(unused_mut, unused_parens)] // UI tests pass `-A unused`—see Issue #43896 | ^^^^^^^^^^ warning: static is marked #[no_mangle], but not exported diff --git a/src/test/ui/lint/unused_parens_json_suggestion.rs b/src/test/ui/lint/unused_parens_json_suggestion.rs index 9decb0cff36..15251795d5e 100644 --- a/src/test/ui/lint/unused_parens_json_suggestion.rs +++ b/src/test/ui/lint/unused_parens_json_suggestion.rs @@ -16,6 +16,8 @@ // stripping away any starting or ending parenthesis characters—hence this // test of the JSON error format. +#![warn(unused_parens)] + fn main() { // We want to suggest the properly-balanced expression `1 / (2 + 3)`, not // the malformed `1 / (2 + 3` diff --git a/src/test/ui/lint/unused_parens_json_suggestion.stderr b/src/test/ui/lint/unused_parens_json_suggestion.stderr index 701334d8890..ae5b53da175 100644 --- a/src/test/ui/lint/unused_parens_json_suggestion.stderr +++ b/src/test/ui/lint/unused_parens_json_suggestion.stderr @@ -1 +1 @@ -{"message":"unnecessary parentheses around assigned value","code":null,"level":"warning","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":976,"byte_end":989,"line_start":22,"line_end":22,"column_start":14,"column_end":27,"is_primary":true,"text":[{"text":" let _a = (1 / (2 + 3));","highlight_start":14,"highlight_end":27}],"label":null,"suggested_replacement":null,"expansion":null}],"children":[{"message":"#[warn(unused_parens)] on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":976,"byte_end":989,"line_start":22,"line_end":22,"column_start":14,"column_end":27,"is_primary":true,"text":[{"text":" let _a = (1 / (2 + 3));","highlight_start":14,"highlight_end":27}],"label":null,"suggested_replacement":"1 / (2 + 3)","expansion":null}],"children":[],"rendered":null}],"rendered":null} +{"message":"unnecessary parentheses around assigned value","code":null,"level":"warning","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":1001,"byte_end":1014,"line_start":24,"line_end":24,"column_start":14,"column_end":27,"is_primary":true,"text":[{"text":" let _a = (1 / (2 + 3));","highlight_start":14,"highlight_end":27}],"label":null,"suggested_replacement":null,"expansion":null}],"children":[{"message":"lint level defined here","code":null,"level":"note","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":847,"byte_end":860,"line_start":19,"line_end":19,"column_start":9,"column_end":22,"is_primary":true,"text":[{"text":"#![warn(unused_parens)]","highlight_start":9,"highlight_end":22}],"label":null,"suggested_replacement":null,"expansion":null}],"children":[],"rendered":null},{"message":"remove these parentheses","code":null,"level":"help","spans":[{"file_name":"$DIR/unused_parens_json_suggestion.rs","byte_start":1001,"byte_end":1014,"line_start":24,"line_end":24,"column_start":14,"column_end":27,"is_primary":true,"text":[{"text":" let _a = (1 / (2 + 3));","highlight_start":14,"highlight_end":27}],"label":null,"suggested_replacement":"1 / (2 + 3)","expansion":null}],"children":[],"rendered":null}],"rendered":null} diff --git a/src/test/ui/path-lookahead.stderr b/src/test/ui/path-lookahead.stderr index 19e22b3f6f9..059312b2851 100644 --- a/src/test/ui/path-lookahead.stderr +++ b/src/test/ui/path-lookahead.stderr @@ -4,7 +4,12 @@ warning: unnecessary parentheses around `return` value 18 | return (::to_string(&arg)); //~WARN unnecessary parentheses around `return` value | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses | - = note: #[warn(unused_parens)] on by default +note: lint level defined here + --> $DIR/path-lookahead.rs:13:9 + | +13 | #![warn(unused)] + | ^^^^^^ + = note: #[warn(unused_parens)] implied by #[warn(unused)] warning: function is never used: `with_parens` --> $DIR/path-lookahead.rs:17:1 diff --git a/src/tools/toolstate.toml b/src/tools/toolstate.toml index e62597c5216..f1684f4c5ac 100644 --- a/src/tools/toolstate.toml +++ b/src/tools/toolstate.toml @@ -26,7 +26,7 @@ miri = "Broken" # ping @Manishearth @llogiq @mcarton @oli-obk -clippy = "Compiling" +clippy = "Broken" # ping @nrc rls = "Testing"