Auto merge of #149729 - matthiaskrgr:rollup-25plwn0, r=matthiaskrgr
Rollup of 4 pull requests Successful merges: - rust-lang/rust#147136 (Add warn-by-default lint for visibility on `const _` declarations) - rust-lang/rust#149498 (Tidying up `tests/ui/issues` tests [1/N]) - rust-lang/rust#149721 (rustc book: fix `*-pc-windows-msvc` link label in sidebar) - rust-lang/rust#149724 (Fix off-by-one staging output when testing the library) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
aa30176300
38 changed files with 318 additions and 150 deletions
|
|
@ -33,7 +33,7 @@ use rustc_session::Session;
|
|||
use rustc_session::lint::BuiltinLintDiag;
|
||||
use rustc_session::lint::builtin::{
|
||||
DEPRECATED_WHERE_CLAUSE_LOCATION, MISSING_ABI, MISSING_UNSAFE_ON_EXTERN,
|
||||
PATTERNS_IN_FNS_WITHOUT_BODY,
|
||||
PATTERNS_IN_FNS_WITHOUT_BODY, UNUSED_VISIBILITIES,
|
||||
};
|
||||
use rustc_session::parse::feature_err;
|
||||
use rustc_span::{Ident, Span, kw, sym};
|
||||
|
|
@ -1339,7 +1339,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
|
|||
}
|
||||
});
|
||||
}
|
||||
ItemKind::Const(box ConstItem { defaultness, rhs, .. }) => {
|
||||
ItemKind::Const(box ConstItem { defaultness, ident, rhs, .. }) => {
|
||||
self.check_defaultness(item.span, *defaultness);
|
||||
if rhs.is_none() {
|
||||
self.dcx().emit_err(errors::ConstWithoutBody {
|
||||
|
|
@ -1347,6 +1347,18 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
|
|||
replace_span: self.ending_semi_or_hi(item.span),
|
||||
});
|
||||
}
|
||||
if ident.name == kw::Underscore
|
||||
&& !matches!(item.vis.kind, VisibilityKind::Inherited)
|
||||
&& ident.span.eq_ctxt(item.vis.span)
|
||||
{
|
||||
self.lint_buffer.buffer_lint(
|
||||
UNUSED_VISIBILITIES,
|
||||
item.id,
|
||||
item.vis.span,
|
||||
BuiltinLintDiag::UnusedVisibility(item.vis.span),
|
||||
)
|
||||
}
|
||||
|
||||
visit::walk_item(self, item);
|
||||
}
|
||||
ItemKind::Static(box StaticItem { expr, safety, .. }) => {
|
||||
|
|
|
|||
|
|
@ -978,6 +978,10 @@ lint_unused_op = unused {$op} that must be used
|
|||
|
||||
lint_unused_result = unused result of type `{$ty}`
|
||||
|
||||
lint_unused_visibilities = visibility qualifiers have no effect on `const _` declarations
|
||||
.note = `const _` does not declare a name, so there is nothing for the qualifier to apply to
|
||||
.suggestion = remove the qualifier
|
||||
|
||||
lint_use_let_underscore_ignore_suggestion = use `let _ = ...` to ignore the expression or result
|
||||
|
||||
lint_useless_ptr_null_checks_fn_ptr = function pointers are not nullable, so checking them for null will always return false
|
||||
|
|
|
|||
|
|
@ -302,6 +302,9 @@ pub fn decorate_builtin_lint(
|
|||
BuiltinLintDiag::UnusedCrateDependency { extern_crate, local_crate } => {
|
||||
lints::UnusedCrateDependency { extern_crate, local_crate }.decorate_lint(diag)
|
||||
}
|
||||
BuiltinLintDiag::UnusedVisibility(span) => {
|
||||
lints::UnusedVisibility { span }.decorate_lint(diag)
|
||||
}
|
||||
BuiltinLintDiag::AttributeLint(kind) => decorate_attribute_lint(sess, tcx, &kind, diag),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,6 +291,7 @@ fn register_builtins(store: &mut LintStore) {
|
|||
"unused",
|
||||
UNUSED_IMPORTS,
|
||||
UNUSED_VARIABLES,
|
||||
UNUSED_VISIBILITIES,
|
||||
UNUSED_ASSIGNMENTS,
|
||||
DEAD_CODE,
|
||||
UNUSED_MUT,
|
||||
|
|
|
|||
|
|
@ -3191,3 +3191,11 @@ pub(crate) struct UnsafeAttrOutsideUnsafeSuggestion {
|
|||
#[suggestion_part(code = ")")]
|
||||
pub right: Span,
|
||||
}
|
||||
|
||||
#[derive(LintDiagnostic)]
|
||||
#[diag(lint_unused_visibilities)]
|
||||
#[note]
|
||||
pub(crate) struct UnusedVisibility {
|
||||
#[suggestion(style = "short", code = "", applicability = "machine-applicable")]
|
||||
pub span: Span,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -143,6 +143,7 @@ declare_lint_pass! {
|
|||
UNUSED_QUALIFICATIONS,
|
||||
UNUSED_UNSAFE,
|
||||
UNUSED_VARIABLES,
|
||||
UNUSED_VISIBILITIES,
|
||||
USELESS_DEPRECATED,
|
||||
VARARGS_WITHOUT_PATTERN,
|
||||
WARNINGS,
|
||||
|
|
@ -693,6 +694,26 @@ declare_lint! {
|
|||
"detect variables which are not used in any way"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `unused_visibilities` lint detects visibility qualifiers (like `pub`)
|
||||
/// on a `const _` item.
|
||||
///
|
||||
/// ### Example
|
||||
///
|
||||
/// ```rust
|
||||
/// pub const _: () = {};
|
||||
/// ```
|
||||
///
|
||||
/// {{produces}}
|
||||
///
|
||||
/// ### Explanation
|
||||
///
|
||||
/// These qualifiers have no effect, as `const _` items are unnameable.
|
||||
pub UNUSED_VISIBILITIES,
|
||||
Warn,
|
||||
"detect visibility qualifiers on `const _` items"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `unused_assignments` lint detects assignments that will never be read.
|
||||
///
|
||||
|
|
|
|||
|
|
@ -696,6 +696,7 @@ pub enum BuiltinLintDiag {
|
|||
extern_crate: Symbol,
|
||||
local_crate: Symbol,
|
||||
},
|
||||
UnusedVisibility(Span),
|
||||
AttributeLint(AttributeLintKind),
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2818,10 +2818,15 @@ fn run_cargo_test<'a>(
|
|||
builder: &Builder<'_>,
|
||||
) -> bool {
|
||||
let compiler = cargo.compiler();
|
||||
let stage = match cargo.mode() {
|
||||
Mode::Std => compiler.stage,
|
||||
_ => compiler.stage + 1,
|
||||
};
|
||||
|
||||
let mut cargo = prepare_cargo_test(cargo, libtest_args, crates, target, builder);
|
||||
let _time = helpers::timeit(builder);
|
||||
let _group =
|
||||
description.into().and_then(|what| builder.msg_test(what, target, compiler.stage + 1));
|
||||
|
||||
let _group = description.into().and_then(|what| builder.msg_test(what, target, stage));
|
||||
|
||||
#[cfg(feature = "build-metrics")]
|
||||
builder.metrics.begin_test_suite(
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ pub struct Cargo {
|
|||
command: BootstrapCommand,
|
||||
args: Vec<OsString>,
|
||||
compiler: Compiler,
|
||||
mode: Mode,
|
||||
target: TargetSelection,
|
||||
rustflags: Rustflags,
|
||||
rustdocflags: Rustflags,
|
||||
|
|
@ -141,6 +142,10 @@ impl Cargo {
|
|||
self.compiler
|
||||
}
|
||||
|
||||
pub fn mode(&self) -> Mode {
|
||||
self.mode
|
||||
}
|
||||
|
||||
pub fn into_cmd(self) -> BootstrapCommand {
|
||||
self.into()
|
||||
}
|
||||
|
|
@ -1404,6 +1409,7 @@ impl Builder<'_> {
|
|||
command: cargo,
|
||||
args: vec![],
|
||||
compiler,
|
||||
mode,
|
||||
target,
|
||||
rustflags,
|
||||
rustdocflags,
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@
|
|||
- [\*-unknown-openbsd](platform-support/openbsd.md)
|
||||
- [\*-unknown-redox](platform-support/redox.md)
|
||||
- [\*-unknown-uefi](platform-support/unknown-uefi.md)
|
||||
- [\*-unknown-windows-msvc](platform-support/windows-msvc.md)
|
||||
- [\*-pc-windows-msvc](platform-support/windows-msvc.md)
|
||||
- [\*-uwp-windows-msvc](platform-support/uwp-windows-msvc.md)
|
||||
- [\*-wrs-vxworks](platform-support/vxworks.md)
|
||||
- [wasm32-wasip1](platform-support/wasm32-wasip1.md)
|
||||
|
|
|
|||
|
|
@ -71,10 +71,10 @@ LL | impl<T: core::cmp::Eq> core::fmt::Display for X<T>
|
|||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: consider bringing this path into scope with the `use` keyword
|
||||
--> tests/ui-toml/absolute_paths/absolute_paths.rs:113:14
|
||||
--> tests/ui-toml/absolute_paths/absolute_paths.rs:113:10
|
||||
|
|
||||
LL | pub const _: crate::S = {
|
||||
| ^^^^^^^^
|
||||
LL | const _: crate::S = {
|
||||
| ^^^^^^^^
|
||||
|
||||
error: consider bringing this path into scope with the `use` keyword
|
||||
--> tests/ui-toml/absolute_paths/absolute_paths.rs:114:9
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ mod m1 {
|
|||
}
|
||||
|
||||
//~[no_short]v absolute_paths
|
||||
pub const _: crate::S = {
|
||||
const _: crate::S = {
|
||||
let crate::S = m1::S; //~[no_short] absolute_paths
|
||||
|
||||
crate::m1::S
|
||||
|
|
|
|||
10
tests/ui/box/self-assignment.rs
Normal file
10
tests/ui/box/self-assignment.rs
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
//@ run-pass
|
||||
//! regression test for <https://github.com/rust-lang/rust/issues/3290>
|
||||
|
||||
#![allow(dead_code)]
|
||||
|
||||
pub fn main() {
|
||||
let mut x: Box<_> = Box::new(3);
|
||||
x = x;
|
||||
assert_eq!(*x, 3);
|
||||
}
|
||||
|
|
@ -4,12 +4,12 @@ pub const C: () = {
|
|||
//~^ ERROR: destructor of `String` cannot be evaluated at compile-time
|
||||
};
|
||||
|
||||
pub const _: () = {
|
||||
const _: () = {
|
||||
let _: &'static _ = &id(&String::new());
|
||||
//~^ ERROR: destructor of `String` cannot be evaluated at compile-time
|
||||
};
|
||||
|
||||
pub const _: () = {
|
||||
const _: () = {
|
||||
let _: &'static _ = &std::mem::ManuallyDrop::new(String::new());
|
||||
//~^ ERROR: temporary value dropped while borrowed
|
||||
};
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@
|
|||
|
||||
const FOO: &usize = &42;
|
||||
|
||||
pub const _: () = assert!(!(FOO as *const usize).is_null());
|
||||
const _: () = assert!(!(FOO as *const usize).is_null());
|
||||
|
||||
pub const _: () = assert!(!(42 as *const usize).is_null());
|
||||
const _: () = assert!(!(42 as *const usize).is_null());
|
||||
|
||||
pub const _: () = assert!((0 as *const usize).is_null());
|
||||
const _: () = assert!((0 as *const usize).is_null());
|
||||
|
||||
pub const _: () = assert!(std::ptr::null::<usize>().is_null());
|
||||
const _: () = assert!(std::ptr::null::<usize>().is_null());
|
||||
|
||||
pub const _: () = assert!(!("foo" as *const str).is_null());
|
||||
const _: () = assert!(!("foo" as *const str).is_null());
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
// Can't use unit struct as constructor function
|
||||
// related issue <https://github.com/rust-lang/rust/issues/20714>
|
||||
|
||||
//@ aux-build:empty-struct.rs
|
||||
|
||||
|
|
@ -8,7 +9,7 @@ use empty_struct::*;
|
|||
struct Empty2;
|
||||
|
||||
enum E {
|
||||
Empty4
|
||||
Empty4,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error[E0618]: expected function, found struct `Empty2`
|
||||
--> $DIR/empty-struct-unit-expr.rs:15:14
|
||||
--> $DIR/empty-struct-unit-expr.rs:16:14
|
||||
|
|
||||
LL | struct Empty2;
|
||||
| ------------- struct `Empty2` defined here
|
||||
|
|
@ -16,9 +16,9 @@ LL + let e2 = Empty2;
|
|||
|
|
||||
|
||||
error[E0618]: expected function, found enum variant `E::Empty4`
|
||||
--> $DIR/empty-struct-unit-expr.rs:16:14
|
||||
--> $DIR/empty-struct-unit-expr.rs:17:14
|
||||
|
|
||||
LL | Empty4
|
||||
LL | Empty4,
|
||||
| ------ enum variant `E::Empty4` defined here
|
||||
...
|
||||
LL | let e4 = E::Empty4();
|
||||
|
|
@ -33,7 +33,7 @@ LL + let e4 = E::Empty4;
|
|||
|
|
||||
|
||||
error[E0618]: expected function, found struct `XEmpty2`
|
||||
--> $DIR/empty-struct-unit-expr.rs:18:15
|
||||
--> $DIR/empty-struct-unit-expr.rs:19:15
|
||||
|
|
||||
LL | let xe2 = XEmpty2();
|
||||
| ^^^^^^^--
|
||||
|
|
@ -47,7 +47,7 @@ LL + let xe2 = XEmpty2;
|
|||
|
|
||||
|
||||
error[E0618]: expected function, found enum variant `XE::XEmpty4`
|
||||
--> $DIR/empty-struct-unit-expr.rs:19:15
|
||||
--> $DIR/empty-struct-unit-expr.rs:20:15
|
||||
|
|
||||
LL | let xe4 = XE::XEmpty4();
|
||||
| ^^^^^^^^^^^--
|
||||
|
|
|
|||
|
|
@ -1,3 +1,6 @@
|
|||
//! regression test for #37576, #50802
|
||||
//! Tests that using unlabeled `break` or `continue` within a loop or while's condition.
|
||||
|
||||
fn main() {
|
||||
'test_1: while break 'test_1 {}
|
||||
while break {}
|
||||
|
|
@ -7,9 +10,13 @@ fn main() {
|
|||
while let true = break {}
|
||||
//~^ ERROR `break` or `continue` with no label
|
||||
|
||||
loop { 'test_3: while break 'test_3 {} }
|
||||
loop { while break {} }
|
||||
//~^ ERROR `break` or `continue` with no label
|
||||
loop {
|
||||
'test_3: while break 'test_3 {}
|
||||
}
|
||||
loop {
|
||||
while break {}
|
||||
//~^ ERROR `break` or `continue` with no label
|
||||
}
|
||||
|
||||
loop {
|
||||
'test_4: while break 'test_4 {}
|
||||
|
|
@ -29,9 +36,13 @@ fn main() {
|
|||
while let true = continue {}
|
||||
//~^ ERROR `break` or `continue` with no label
|
||||
|
||||
loop { 'test_7: while continue 'test_7 {} }
|
||||
loop { while continue {} }
|
||||
//~^ ERROR `break` or `continue` with no label
|
||||
loop {
|
||||
'test_7: while continue 'test_7 {}
|
||||
}
|
||||
loop {
|
||||
while continue {}
|
||||
//~^ ERROR `break` or `continue` with no label
|
||||
}
|
||||
|
||||
loop {
|
||||
'test_8: while continue 'test_8 {}
|
||||
|
|
@ -42,4 +53,13 @@ fn main() {
|
|||
//~^ ERROR `break` or `continue` with no label
|
||||
continue;
|
||||
}
|
||||
|
||||
'test_9: loop {
|
||||
break while continue 'test_9 {};
|
||||
}
|
||||
loop {
|
||||
break while continue {
|
||||
//~^ ERROR `break` or `continue` with no label
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -1,51 +1,57 @@
|
|||
error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
|
||||
--> $DIR/issue-37576.rs:3:11
|
||||
--> $DIR/break-continue-in-loop-while-condition.rs:6:11
|
||||
|
|
||||
LL | while break {}
|
||||
| ^^^^^ unlabeled `break` in the condition of a `while` loop
|
||||
|
||||
error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
|
||||
--> $DIR/issue-37576.rs:7:22
|
||||
--> $DIR/break-continue-in-loop-while-condition.rs:10:22
|
||||
|
|
||||
LL | while let true = break {}
|
||||
| ^^^^^ unlabeled `break` in the condition of a `while` loop
|
||||
|
||||
error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
|
||||
--> $DIR/issue-37576.rs:11:18
|
||||
|
|
||||
LL | loop { while break {} }
|
||||
| ^^^^^ unlabeled `break` in the condition of a `while` loop
|
||||
|
||||
error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
|
||||
--> $DIR/issue-37576.rs:19:15
|
||||
--> $DIR/break-continue-in-loop-while-condition.rs:17:15
|
||||
|
|
||||
LL | while break {}
|
||||
| ^^^^^ unlabeled `break` in the condition of a `while` loop
|
||||
|
||||
error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
|
||||
--> $DIR/issue-37576.rs:25:11
|
||||
--> $DIR/break-continue-in-loop-while-condition.rs:26:15
|
||||
|
|
||||
LL | while break {}
|
||||
| ^^^^^ unlabeled `break` in the condition of a `while` loop
|
||||
|
||||
error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
|
||||
--> $DIR/break-continue-in-loop-while-condition.rs:32:11
|
||||
|
|
||||
LL | while continue {}
|
||||
| ^^^^^^^^ unlabeled `continue` in the condition of a `while` loop
|
||||
|
||||
error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
|
||||
--> $DIR/issue-37576.rs:29:22
|
||||
--> $DIR/break-continue-in-loop-while-condition.rs:36:22
|
||||
|
|
||||
LL | while let true = continue {}
|
||||
| ^^^^^^^^ unlabeled `continue` in the condition of a `while` loop
|
||||
|
||||
error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
|
||||
--> $DIR/issue-37576.rs:33:18
|
||||
|
|
||||
LL | loop { while continue {} }
|
||||
| ^^^^^^^^ unlabeled `continue` in the condition of a `while` loop
|
||||
|
||||
error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
|
||||
--> $DIR/issue-37576.rs:41:15
|
||||
--> $DIR/break-continue-in-loop-while-condition.rs:43:15
|
||||
|
|
||||
LL | while continue {}
|
||||
| ^^^^^^^^ unlabeled `continue` in the condition of a `while` loop
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
|
||||
--> $DIR/break-continue-in-loop-while-condition.rs:52:15
|
||||
|
|
||||
LL | while continue {}
|
||||
| ^^^^^^^^ unlabeled `continue` in the condition of a `while` loop
|
||||
|
||||
error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
|
||||
--> $DIR/break-continue-in-loop-while-condition.rs:61:21
|
||||
|
|
||||
LL | break while continue {
|
||||
| ^^^^^^^^ unlabeled `continue` in the condition of a `while` loop
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0590`.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
struct G;
|
||||
|
||||
fn main() {
|
||||
let g = G(); //~ ERROR: expected function, found struct `G`
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
error[E0618]: expected function, found struct `G`
|
||||
--> $DIR/issue-20714.rs:4:13
|
||||
|
|
||||
LL | struct G;
|
||||
| -------- struct `G` defined here
|
||||
...
|
||||
LL | let g = G();
|
||||
| ^--
|
||||
| |
|
||||
| call expression requires function
|
||||
|
|
||||
help: `G` is a unit struct, and does not take parentheses to be constructed
|
||||
|
|
||||
LL - let g = G();
|
||||
LL + let g = G;
|
||||
|
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0618`.
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
//@ run-pass
|
||||
|
||||
use std::collections::VecDeque;
|
||||
|
||||
pub fn main() {
|
||||
let mut q = VecDeque::new();
|
||||
q.push_front(10);
|
||||
}
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
//@ dont-require-annotations: NOTE
|
||||
|
||||
fn foo<T, U>(x: T, y: U) {
|
||||
let mut xx = x;
|
||||
xx = y;
|
||||
//~^ ERROR mismatched types
|
||||
//~| NOTE expected type parameter `T`, found type parameter `U`
|
||||
//~| NOTE expected type parameter `T`
|
||||
//~| NOTE found type parameter `U`
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-2951.rs:5:10
|
||||
|
|
||||
LL | fn foo<T, U>(x: T, y: U) {
|
||||
| - - found type parameter
|
||||
| |
|
||||
| expected type parameter
|
||||
LL | let mut xx = x;
|
||||
| - expected due to this value
|
||||
LL | xx = y;
|
||||
| ^ expected type parameter `T`, found type parameter `U`
|
||||
|
|
||||
= note: expected type parameter `T`
|
||||
found type parameter `U`
|
||||
= note: a type parameter was expected, but a different one was found; you might be missing a type parameter or trait bound
|
||||
= note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
//@ run-pass
|
||||
#![allow(dead_code)]
|
||||
|
||||
pub fn main() {
|
||||
let mut x: Box<_> = Box::new(3);
|
||||
x = x;
|
||||
assert_eq!(*x, 3);
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
#[allow(unreachable_code)]
|
||||
|
||||
fn main() {
|
||||
loop {
|
||||
break while continue { //~ ERROR E0590
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
error[E0590]: `break` or `continue` with no label in the condition of a `while` loop
|
||||
--> $DIR/issue-50802.rs:5:21
|
||||
|
|
||||
LL | break while continue {
|
||||
| ^^^^^^^^ unlabeled `continue` in the condition of a `while` loop
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0590`.
|
||||
|
|
@ -413,3 +413,21 @@ note: the lint level is defined here
|
|||
LL | #![forbid(forbidden_lint_groups)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Future breakage diagnostic:
|
||||
error: warn(unused) incompatible with previous forbid
|
||||
--> $DIR/issue-70819-dont-override-forbid-in-same-scope.rs:22:13
|
||||
|
|
||||
LL | #![forbid(unused)]
|
||||
| ------ `forbid` level set here
|
||||
LL | #![deny(unused)]
|
||||
LL | #![warn(unused)]
|
||||
| ^^^^^^ overruled by previous forbid
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #81670 <https://github.com/rust-lang/rust/issues/81670>
|
||||
note: the lint level is defined here
|
||||
--> $DIR/issue-70819-dont-override-forbid-in-same-scope.rs:17:11
|
||||
|
|
||||
LL | #![forbid(forbidden_lint_groups)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
|
|
|||
|
|
@ -453,3 +453,21 @@ note: the lint level is defined here
|
|||
LL | #![forbid(forbidden_lint_groups)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Future breakage diagnostic:
|
||||
error: allow(unused) incompatible with previous forbid
|
||||
--> $DIR/outer-forbid.rs:25:9
|
||||
|
|
||||
LL | #![forbid(unused, non_snake_case)]
|
||||
| ------ `forbid` level set here
|
||||
...
|
||||
LL | #[allow(unused)]
|
||||
| ^^^^^^ overruled by previous forbid
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= note: for more information, see issue #81670 <https://github.com/rust-lang/rust/issues/81670>
|
||||
note: the lint level is defined here
|
||||
--> $DIR/outer-forbid.rs:18:11
|
||||
|
|
||||
LL | #![forbid(forbidden_lint_groups)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
|
|
|||
29
tests/ui/lint/unused-visibilities.fixed
Normal file
29
tests/ui/lint/unused-visibilities.fixed
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
//@ check-pass
|
||||
//@ run-rustfix
|
||||
|
||||
#![warn(unused_visibilities)]
|
||||
|
||||
const _: () = {};
|
||||
//~^WARN visibility qualifiers have no effect on `const _` declarations
|
||||
|
||||
const _: () = {};
|
||||
//~^WARN visibility qualifiers have no effect on `const _` declarations
|
||||
|
||||
macro_rules! foo {
|
||||
() => {
|
||||
const _: () = {};
|
||||
//~^WARN visibility qualifiers have no effect on `const _` declarations
|
||||
};
|
||||
}
|
||||
|
||||
foo!();
|
||||
|
||||
macro_rules! bar {
|
||||
($tt:tt) => {
|
||||
pub const $tt: () = {};
|
||||
};
|
||||
}
|
||||
|
||||
bar!(_);
|
||||
|
||||
fn main() {}
|
||||
29
tests/ui/lint/unused-visibilities.rs
Normal file
29
tests/ui/lint/unused-visibilities.rs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
//@ check-pass
|
||||
//@ run-rustfix
|
||||
|
||||
#![warn(unused_visibilities)]
|
||||
|
||||
pub const _: () = {};
|
||||
//~^WARN visibility qualifiers have no effect on `const _` declarations
|
||||
|
||||
pub(self) const _: () = {};
|
||||
//~^WARN visibility qualifiers have no effect on `const _` declarations
|
||||
|
||||
macro_rules! foo {
|
||||
() => {
|
||||
pub const _: () = {};
|
||||
//~^WARN visibility qualifiers have no effect on `const _` declarations
|
||||
};
|
||||
}
|
||||
|
||||
foo!();
|
||||
|
||||
macro_rules! bar {
|
||||
($tt:tt) => {
|
||||
pub const $tt: () = {};
|
||||
};
|
||||
}
|
||||
|
||||
bar!(_);
|
||||
|
||||
fn main() {}
|
||||
35
tests/ui/lint/unused-visibilities.stderr
Normal file
35
tests/ui/lint/unused-visibilities.stderr
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
warning: visibility qualifiers have no effect on `const _` declarations
|
||||
--> $DIR/unused-visibilities.rs:6:1
|
||||
|
|
||||
LL | pub const _: () = {};
|
||||
| ^^^ help: remove the qualifier
|
||||
|
|
||||
= note: `const _` does not declare a name, so there is nothing for the qualifier to apply to
|
||||
note: the lint level is defined here
|
||||
--> $DIR/unused-visibilities.rs:4:9
|
||||
|
|
||||
LL | #![warn(unused_visibilities)]
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: visibility qualifiers have no effect on `const _` declarations
|
||||
--> $DIR/unused-visibilities.rs:9:1
|
||||
|
|
||||
LL | pub(self) const _: () = {};
|
||||
| ^^^^^^^^^ help: remove the qualifier
|
||||
|
|
||||
= note: `const _` does not declare a name, so there is nothing for the qualifier to apply to
|
||||
|
||||
warning: visibility qualifiers have no effect on `const _` declarations
|
||||
--> $DIR/unused-visibilities.rs:14:9
|
||||
|
|
||||
LL | pub const _: () = {};
|
||||
| ^^^ help: remove the qualifier
|
||||
...
|
||||
LL | foo!();
|
||||
| ------ in this macro invocation
|
||||
|
|
||||
= note: `const _` does not declare a name, so there is nothing for the qualifier to apply to
|
||||
= note: this warning originates in the macro `foo` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
warning: 3 warnings emitted
|
||||
|
||||
|
|
@ -1,6 +1,9 @@
|
|||
//! regression test for <https://github.com/rust-lang/rust/issues/3680>
|
||||
|
||||
fn main() {
|
||||
match None { //~ NOTE this expression has type `Option<_>`
|
||||
Err(_) => ()
|
||||
match None {
|
||||
//~^ NOTE this expression has type `Option<_>`
|
||||
Err(_) => (),
|
||||
//~^ ERROR mismatched types
|
||||
//~| NOTE expected enum `Option<_>`
|
||||
//~| NOTE found enum `Result<_, _>`
|
||||
|
|
@ -1,16 +1,17 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-3680.rs:3:9
|
||||
--> $DIR/match-option-result-mismatch.rs:6:9
|
||||
|
|
||||
LL | match None {
|
||||
| ---- this expression has type `Option<_>`
|
||||
LL | Err(_) => ()
|
||||
LL |
|
||||
LL | Err(_) => (),
|
||||
| ^^^^^^ expected `Option<_>`, found `Result<_, _>`
|
||||
|
|
||||
= note: expected enum `Option<_>`
|
||||
found enum `Result<_, _>`
|
||||
help: try wrapping the pattern in `Some`
|
||||
|
|
||||
LL | Some(Err(_)) => ()
|
||||
LL | Some(Err(_)) => (),
|
||||
| +++++ +
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
//@ run-pass
|
||||
//! regression test for <https://github.com/rust-lang/rust/issues/3091>
|
||||
|
||||
pub fn main() {
|
||||
let x = 1;
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
#![feature(const_closures, const_trait_impl)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
pub const _: () = {
|
||||
const _: () = {
|
||||
assert!((const || true)());
|
||||
//~^ ERROR }: [const] Fn()` is not satisfied
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,14 +1,24 @@
|
|||
// Test that we print out the names of type parameters correctly in
|
||||
// our error messages.
|
||||
// related issue <https://github.com/rust-lang/rust/issues/2951>
|
||||
|
||||
//@ dont-require-annotations: NOTE
|
||||
|
||||
fn foo<Foo, Bar>(x: Foo) -> Bar {
|
||||
x
|
||||
//~^ ERROR mismatched types
|
||||
//~| NOTE expected type parameter `Bar`, found type parameter `Foo`
|
||||
//~| NOTE expected type parameter `Bar`
|
||||
//~| NOTE found type parameter `Foo`
|
||||
//~^ ERROR mismatched types
|
||||
//~| NOTE expected type parameter `Bar`, found type parameter `Foo`
|
||||
//~| NOTE expected type parameter `Bar`
|
||||
//~| NOTE found type parameter `Foo`
|
||||
}
|
||||
|
||||
fn bar<Foo, Bar>(x: Foo, y: Bar) {
|
||||
let mut xx = x;
|
||||
xx = y;
|
||||
//~^ ERROR mismatched types
|
||||
//~| NOTE expected type parameter `Foo`, found type parameter `Bar`
|
||||
//~| NOTE expected type parameter `Foo`
|
||||
//~| NOTE found type parameter `Bar`
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/type-parameter-names.rs:7:5
|
||||
--> $DIR/type-parameter-names.rs:8:5
|
||||
|
|
||||
LL | fn foo<Foo, Bar>(x: Foo) -> Bar {
|
||||
| --- --- --- expected `Bar` because of return type
|
||||
|
|
@ -15,6 +15,23 @@ LL | x
|
|||
= note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters
|
||||
= note: the caller chooses a type for `Bar` which can be different from `Foo`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/type-parameter-names.rs:17:10
|
||||
|
|
||||
LL | fn bar<Foo, Bar>(x: Foo, y: Bar) {
|
||||
| --- --- found type parameter
|
||||
| |
|
||||
| expected type parameter
|
||||
LL | let mut xx = x;
|
||||
| - expected due to this value
|
||||
LL | xx = y;
|
||||
| ^ expected type parameter `Foo`, found type parameter `Bar`
|
||||
|
|
||||
= note: expected type parameter `Foo`
|
||||
found type parameter `Bar`
|
||||
= note: a type parameter was expected, but a different one was found; you might be missing a type parameter or trait bound
|
||||
= note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue