#![feature(core_intrinsics)]
#![feature(i128_type)]
#![cfg_attr(windows, feature(libc))]
+#![feature(macro_vis_matcher)]
#![feature(never_type)]
#![feature(nonzero)]
#![feature(quote)]
"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,
UNUSED_FEATURES,
STABLE_FEATURES,
UNKNOWN_CRATE_TYPES,
- FAT_PTR_TRANSMUTES,
TRIVIAL_CASTS,
TRIVIAL_NUMERIC_CASTS,
PRIVATE_IN_PUBLIC,
}
}
-/// 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.
}
}
-declare_lint! {
- DEPRECATED_ATTR,
- Warn,
- "detects use of deprecated attributes"
-}
-
/// Checks for use of attributes which have been deprecated.
#[derive(Clone)]
pub struct DeprecatedAttr {
impl LintPass for DeprecatedAttr {
fn get_lints(&self) -> LintArray {
- lint_array!(DEPRECATED_ATTR)
+ lint_array!()
}
}
#![feature(box_patterns)]
#![feature(box_syntax)]
#![feature(i128_type)]
+#![feature(macro_vis_matcher)]
#![feature(quote)]
#![feature(rustc_diagnostic_macros)]
#![feature(slice_patterns)]
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:
//
// 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",
}
declare_lint! {
- UNUSED_PARENS,
+ pub(super) UNUSED_PARENS,
Warn,
"`if`, `match`, `while` and `return` do not need parentheses"
}
}
declare_lint! {
- UNUSED_ALLOCATION,
+ pub(super) UNUSED_ALLOCATION,
Warn,
"detects unnecessary allocations that can be eliminated"
}
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()));
}
}
#![feature(plugin_registrar, rustc_private)]
#![feature(box_syntax)]
+#![feature(macro_vis_matcher)]
#[macro_use] extern crate rustc;
extern crate rustc_plugin;
#![feature(plugin_registrar)]
#![feature(box_syntax, rustc_private)]
+#![feature(macro_vis_matcher)]
// Load rustc as a plugin to get macros
#[macro_use]
#![feature(plugin_registrar)]
#![feature(box_syntax, rustc_private)]
+#![feature(macro_vis_matcher)]
extern crate syntax;
);
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
);
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
);
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
);
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
#![feature(plugin_registrar, rustc_private)]
#![feature(box_syntax)]
+#![feature(macro_vis_matcher)]
#[macro_use] extern crate rustc;
extern crate rustc_plugin;
// 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]
#![feature(plugin_registrar)]
#![feature(box_syntax, rustc_private)]
+#![feature(macro_vis_matcher)]
// Load rustc as a plugin to get macros
#[macro_use]
#![feature(plugin_registrar)]
#![feature(box_syntax, rustc_private)]
+#![feature(macro_vis_matcher)]
extern crate syntax;
-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;
|
= 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);
// 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`
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
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
// 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`
-{"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}
18 | return (<T as ToString>::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
miri = "Broken"
# ping @Manishearth @llogiq @mcarton @oli-obk
-clippy = "Compiling"
+clippy = "Broken"
# ping @nrc
rls = "Broken"