diff --git a/src/doc/unstable-book/src/language-features/irrefutable-let-patterns.md b/src/doc/unstable-book/src/language-features/irrefutable-let-patterns.md deleted file mode 100644 index 46b843778e810..0000000000000 --- a/src/doc/unstable-book/src/language-features/irrefutable-let-patterns.md +++ /dev/null @@ -1,28 +0,0 @@ -# `irrefutable_let_patterns` - -The tracking issue for this feature is: [#44495] - -[#44495]: https://github.com/rust-lang/rust/issues/44495 - ------------------------- - -This feature changes the way that "irrefutable patterns" are handled -in the `if let` and `while let` forms. An *irrefutable pattern* is one -that cannot fail to match -- for example, the `_` pattern matches any -value, and hence it is "irrefutable". Without this feature, using an -irrefutable pattern in an `if let` gives a hard error (since often -this indicates programmer error). But when the feature is enabled, the -error becomes a lint (since in some cases irrefutable patterns are -expected). This means you can use `#[allow]` to silence the lint: - -```rust -#![feature(irrefutable_let_patterns)] - -#[allow(irrefutable_let_patterns)] -fn main() { - // These two examples used to be errors, but now they - // trigger a lint (that is allowed): - if let _ = 5 {} - while let _ = 5 { break; } -} -``` diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs index a09d167f2173c..941e428fc84dd 100644 --- a/src/librustc/lint/builtin.rs +++ b/src/librustc/lint/builtin.rs @@ -290,7 +290,7 @@ declare_lint! { declare_lint! { pub IRREFUTABLE_LET_PATTERNS, - Deny, + Warn, "detects irrefutable patterns in if-let and while-let statements" } diff --git a/src/librustc_mir/diagnostics.rs b/src/librustc_mir/diagnostics.rs index ec5617d705248..3d8890416f900 100644 --- a/src/librustc_mir/diagnostics.rs +++ b/src/librustc_mir/diagnostics.rs @@ -335,11 +335,13 @@ match Some(42) { "##, E0162: r##" +#### Note: this error code is no longer emitted by the compiler. + An if-let pattern attempts to match the pattern, and enters the body if the match was successful. If the match is irrefutable (when it cannot fail to match), use a regular `let`-binding instead. For instance: -```compile_fail,E0162 +```compile_pass struct Irrefutable(i32); let irr = Irrefutable(0); @@ -362,11 +364,13 @@ println!("{}", x); "##, E0165: r##" +#### Note: this error code is no longer emitted by the compiler. + A while-let pattern attempts to match the pattern, and enters the body if the match was successful. If the match is irrefutable (when it cannot fail to match), use a regular `let`-binding inside a `loop` instead. For instance: -```compile_fail,E0165 +```compile_pass,no_run struct Irrefutable(i32); let irr = Irrefutable(0); diff --git a/src/librustc_mir/hair/pattern/check_match.rs b/src/librustc_mir/hair/pattern/check_match.rs index 9fb3a09e3c11e..f08c1e75f0b05 100644 --- a/src/librustc_mir/hair/pattern/check_match.rs +++ b/src/librustc_mir/hair/pattern/check_match.rs @@ -364,7 +364,7 @@ fn check_arms<'a, 'tcx>(cx: &mut MatchCheckCtxt<'a, 'tcx>, { let mut seen = Matrix::empty(); let mut catchall = None; - let mut printed_if_let_err = false; + for (arm_index, &(ref pats, guard)) in arms.iter().enumerate() { for &(pat, hir_pat) in pats { let v = vec![pat]; @@ -373,27 +373,10 @@ fn check_arms<'a, 'tcx>(cx: &mut MatchCheckCtxt<'a, 'tcx>, NotUseful => { match source { hir::MatchSource::IfLetDesugar { .. } => { - if cx.tcx.features().irrefutable_let_patterns { - cx.tcx.lint_node( - lint::builtin::IRREFUTABLE_LET_PATTERNS, - hir_pat.id, pat.span, - "irrefutable if-let pattern"); - } else { - if printed_if_let_err { - // we already printed an irrefutable if-let pattern error. - // We don't want two, that's just confusing. - } else { - // find the first arm pattern so we can use its span - let &(ref first_arm_pats, _) = &arms[0]; - let first_pat = &first_arm_pats[0]; - let span = first_pat.0.span; - struct_span_err!(cx.tcx.sess, span, E0162, - "irrefutable if-let pattern") - .span_label(span, "irrefutable pattern") - .emit(); - printed_if_let_err = true; - } - } + cx.tcx.lint_node( + lint::builtin::IRREFUTABLE_LET_PATTERNS, + hir_pat.id, pat.span, + "irrefutable if-let pattern"); } hir::MatchSource::WhileLetDesugar => { @@ -408,21 +391,10 @@ fn check_arms<'a, 'tcx>(cx: &mut MatchCheckCtxt<'a, 'tcx>, }, // The arm with the wildcard pattern. 1 => { - if cx.tcx.features().irrefutable_let_patterns { - cx.tcx.lint_node( - lint::builtin::IRREFUTABLE_LET_PATTERNS, - hir_pat.id, pat.span, - "irrefutable while-let pattern"); - } else { - // find the first arm pattern so we can use its span - let &(ref first_arm_pats, _) = &arms[0]; - let first_pat = &first_arm_pats[0]; - let span = first_pat.0.span; - struct_span_err!(cx.tcx.sess, span, E0165, - "irrefutable while-let pattern") - .span_label(span, "irrefutable pattern") - .emit(); - } + cx.tcx.lint_node( + lint::builtin::IRREFUTABLE_LET_PATTERNS, + hir_pat.id, pat.span, + "irrefutable while-let pattern"); }, _ => bug!(), } diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 1a4de59cce63b..d2be2085ab347 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -428,9 +428,6 @@ declare_features! ( // `#[doc(alias = "...")]` (active, doc_alias, "1.27.0", Some(50146), None), - // Allows irrefutable patterns in `if let` and `while let` statements (RFC 2086). - (active, irrefutable_let_patterns, "1.27.0", Some(44495), None), - // inconsistent bounds in where clauses (active, trivial_bounds, "1.28.0", Some(48214), None), @@ -686,6 +683,9 @@ declare_features! ( (accepted, extern_crate_item_prelude, "1.31.0", Some(55599), None), // Allows use of the `:literal` macro fragment specifier (RFC 1576). (accepted, macro_literal_matcher, "1.31.0", Some(35625), None), + // Allows irrefutable patterns in if-let and while-let statements (RFC 2086) + (accepted, irrefutable_let_patterns, "1.32.0", Some(44495), None), + // Use `?` as the Kleene "at most one" operator // Integer match exhaustiveness checking (RFC 2591) (accepted, exhaustive_integer_patterns, "1.32.0", Some(50907), None), // Use `?` as the Kleene "at most one" operator. diff --git a/src/test/ui/feature-gates/feature-gate-without_gate_irrefutable_pattern.rs b/src/test/run-pass/allow-irrefutable-if-let.rs similarity index 70% rename from src/test/ui/feature-gates/feature-gate-without_gate_irrefutable_pattern.rs rename to src/test/run-pass/allow-irrefutable-if-let.rs index 7bcddbb6a2f16..bc3c4d1bf7994 100644 --- a/src/test/ui/feature-gates/feature-gate-without_gate_irrefutable_pattern.rs +++ b/src/test/run-pass/allow-irrefutable-if-let.rs @@ -1,6 +1,4 @@ -// gate-test-irrefutable_let_patterns - -// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// Copyright 2012 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -12,6 +10,7 @@ #[allow(irrefutable_let_patterns)] fn main() { - if let _ = 5 {} - //~^ ERROR 15:12: 15:13: irrefutable if-let pattern [E0162] + if let _ = 5 { + let _x = 1; + } } diff --git a/src/test/ui/should-fail-no_gate_irrefutable_if_let_pattern.rs b/src/test/run-pass/allow-irrefutable-while-let.rs similarity index 70% rename from src/test/ui/should-fail-no_gate_irrefutable_if_let_pattern.rs rename to src/test/run-pass/allow-irrefutable-while-let.rs index 8c9a24f4e7222..1590ffd5293d0 100644 --- a/src/test/ui/should-fail-no_gate_irrefutable_if_let_pattern.rs +++ b/src/test/run-pass/allow-irrefutable-while-let.rs @@ -1,4 +1,4 @@ -// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// Copyright 2012 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -8,8 +8,9 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// should-fail-irrefutable_let_patterns +#[allow(irrefutable_let_patterns)] fn main() { - if let _ = 5 {} - //~^ ERROR irrefutable if-let pattern [E0162] + while let _ = 5 { + break; + } } diff --git a/src/test/run-pass/binding/allow_irrefutable_let_patterns.stderr b/src/test/run-pass/binding/allow_irrefutable_let_patterns.stderr new file mode 100644 index 0000000000000..1d0b39219e406 --- /dev/null +++ b/src/test/run-pass/binding/allow_irrefutable_let_patterns.stderr @@ -0,0 +1,8 @@ +warning: the feature `irrefutable_let_patterns` has been stable since 1.32.0 and no longer requires an attribute to enable + + --> $DIR/allow_irrefutable_let_patterns.rs:12:12 + | +LL | #![feature(irrefutable_let_patterns)] + | ^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: #[warn(stable_features)] on by default diff --git a/src/test/ui/error-codes/E0162.stderr b/src/test/ui/error-codes/E0162.stderr deleted file mode 100644 index 91f402dad59b5..0000000000000 --- a/src/test/ui/error-codes/E0162.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0162]: irrefutable if-let pattern - --> $DIR/E0162.rs:15:12 - | -LL | if let Irrefutable(x) = irr { //~ ERROR E0162 - | ^^^^^^^^^^^^^^ irrefutable pattern - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0162`. diff --git a/src/test/ui/error-codes/E0165.rs b/src/test/ui/error-codes/E0165.rs deleted file mode 100644 index 142635fc6ee45..0000000000000 --- a/src/test/ui/error-codes/E0165.rs +++ /dev/null @@ -1,19 +0,0 @@ -// 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -struct Irrefutable(i32); - -fn main() { - let irr = Irrefutable(0); - while let Irrefutable(x) = irr { //~ ERROR E0165 - //~| irrefutable pattern - // ... - } -} diff --git a/src/test/ui/error-codes/E0165.stderr b/src/test/ui/error-codes/E0165.stderr deleted file mode 100644 index 66be95e38d2aa..0000000000000 --- a/src/test/ui/error-codes/E0165.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0165]: irrefutable while-let pattern - --> $DIR/E0165.rs:15:15 - | -LL | while let Irrefutable(x) = irr { //~ ERROR E0165 - | ^^^^^^^^^^^^^^ irrefutable pattern - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0165`. diff --git a/src/test/ui/feature-gates/feature-gate-without_gate_irrefutable_pattern.stderr b/src/test/ui/feature-gates/feature-gate-without_gate_irrefutable_pattern.stderr deleted file mode 100644 index 2b23962a3042e..0000000000000 --- a/src/test/ui/feature-gates/feature-gate-without_gate_irrefutable_pattern.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0162]: irrefutable if-let pattern - --> $DIR/feature-gate-without_gate_irrefutable_pattern.rs:15:12 - | -LL | if let _ = 5 {} - | ^ irrefutable pattern - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0162`. diff --git a/src/test/ui/if/if-let.rs b/src/test/ui/if/if-let.rs index 1e9144910b053..665bb0354b91c 100644 --- a/src/test/ui/if/if-let.rs +++ b/src/test/ui/if/if-let.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// compile-pass + fn macros() { macro_rules! foo{ ($p:pat, $e:expr, $b:block) => {{ @@ -20,20 +22,20 @@ fn macros() { }} } - foo!(a, 1, { //~ ERROR irrefutable if-let + foo!(a, 1, { //~ warning irrefutable if-let println!("irrefutable pattern"); }); - bar!(a, 1, { //~ ERROR irrefutable if-let + bar!(a, 1, { //~ warning irrefutable if-let println!("irrefutable pattern"); }); } pub fn main() { - if let a = 1 { //~ ERROR irrefutable if-let + if let a = 1 { //~ warning irrefutable if-let println!("irrefutable pattern"); } - if let a = 1 { //~ ERROR irrefutable if-let + if let a = 1 { //~ warning irrefutable if-let println!("irrefutable pattern"); } else if true { println!("else-if in irrefutable if-let"); @@ -43,13 +45,13 @@ pub fn main() { if let 1 = 2 { println!("refutable pattern"); - } else if let a = 1 { //~ ERROR irrefutable if-let + } else if let a = 1 { //~ warning irrefutable if-let println!("irrefutable pattern"); } if true { println!("if"); - } else if let a = 1 { //~ ERROR irrefutable if-let + } else if let a = 1 { //~ warning irrefutable if-let println!("irrefutable pattern"); } } diff --git a/src/test/ui/if/if-let.stderr b/src/test/ui/if/if-let.stderr index de8d6feb3c4c8..b0c6e3dc90f2a 100644 --- a/src/test/ui/if/if-let.stderr +++ b/src/test/ui/if/if-let.stderr @@ -1,39 +1,62 @@ -error[E0162]: irrefutable if-let pattern - --> $DIR/if-let.rs:23:10 +warning: irrefutable if-let pattern + --> $DIR/if-let.rs:16:13 | -LL | foo!(a, 1, { //~ ERROR irrefutable if-let - | ^ irrefutable pattern - -error[E0162]: irrefutable if-let pattern - --> $DIR/if-let.rs:26:10 +LL | if let $p = $e $b + | ^^ +... +LL | / foo!(a, 1, { //~ warning irrefutable if-let +LL | | println!("irrefutable pattern"); +LL | | }); + | |_______- in this macro invocation | -LL | bar!(a, 1, { //~ ERROR irrefutable if-let - | ^ irrefutable pattern + = note: #[warn(irrefutable_let_patterns)] on by default -error[E0162]: irrefutable if-let pattern - --> $DIR/if-let.rs:32:12 +warning: irrefutable if-let pattern + --> $DIR/if-let.rs:16:13 | -LL | if let a = 1 { //~ ERROR irrefutable if-let - | ^ irrefutable pattern +LL | if let $p = $e $b + | ^^ +... +LL | / bar!(a, 1, { //~ warning irrefutable if-let +LL | | println!("irrefutable pattern"); +LL | | }); + | |_______- in this macro invocation -error[E0162]: irrefutable if-let pattern - --> $DIR/if-let.rs:36:12 +warning: irrefutable if-let pattern + --> $DIR/if-let.rs:34:5 | -LL | if let a = 1 { //~ ERROR irrefutable if-let - | ^ irrefutable pattern +LL | / if let a = 1 { //~ warning irrefutable if-let +LL | | println!("irrefutable pattern"); +LL | | } + | |_____^ -error[E0162]: irrefutable if-let pattern - --> $DIR/if-let.rs:46:19 +warning: irrefutable if-let pattern + --> $DIR/if-let.rs:38:5 | -LL | } else if let a = 1 { //~ ERROR irrefutable if-let - | ^ irrefutable pattern +LL | / if let a = 1 { //~ warning irrefutable if-let +LL | | println!("irrefutable pattern"); +LL | | } else if true { +LL | | println!("else-if in irrefutable if-let"); +LL | | } else { +LL | | println!("else in irrefutable if-let"); +LL | | } + | |_____^ -error[E0162]: irrefutable if-let pattern - --> $DIR/if-let.rs:52:19 +warning: irrefutable if-let pattern + --> $DIR/if-let.rs:48:12 | -LL | } else if let a = 1 { //~ ERROR irrefutable if-let - | ^ irrefutable pattern +LL | } else if let a = 1 { //~ warning irrefutable if-let + | ____________^ +LL | | println!("irrefutable pattern"); +LL | | } + | |_____^ -error: aborting due to 6 previous errors +warning: irrefutable if-let pattern + --> $DIR/if-let.rs:54:12 + | +LL | } else if let a = 1 { //~ warning irrefutable if-let + | ____________^ +LL | | println!("irrefutable pattern"); +LL | | } + | |_____^ -For more information about this error, try `rustc --explain E0162`. diff --git a/src/test/ui/issues/issue-51714.rs b/src/test/ui/issues/issue-51714.rs index 2b9d51f81b988..231f752fefa22 100644 --- a/src/test/ui/issues/issue-51714.rs +++ b/src/test/ui/issues/issue-51714.rs @@ -20,5 +20,5 @@ fn main() { [(); return while let Some(n) = Some(0) {}]; //~^ ERROR return statement outside of function body - //~^^ ERROR irrefutable while-let pattern + //~^^ warning irrefutable while-let pattern } diff --git a/src/test/ui/issues/issue-51714.stderr b/src/test/ui/issues/issue-51714.stderr index ddc70bfb38e01..ace5daabf838d 100644 --- a/src/test/ui/issues/issue-51714.stderr +++ b/src/test/ui/issues/issue-51714.stderr @@ -22,13 +22,14 @@ error[E0572]: return statement outside of function body LL | [(); return while let Some(n) = Some(0) {}]; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0165]: irrefutable while-let pattern - --> $DIR/issue-51714.rs:21:27 +warning: irrefutable while-let pattern + --> $DIR/issue-51714.rs:21:17 | LL | [(); return while let Some(n) = Some(0) {}]; - | ^^^^^^^ irrefutable pattern + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: #[warn(irrefutable_let_patterns)] on by default -error: aborting due to 5 previous errors +error: aborting due to 4 previous errors -Some errors occurred: E0165, E0572. -For more information about an error, try `rustc --explain E0165`. +For more information about this error, try `rustc --explain E0572`. diff --git a/src/test/run-pass/binding/allow_irrefutable_let_patterns.rs b/src/test/ui/rfc-2086-irrefutable_let_patterns/allow_irrefutable_let_patterns.rs similarity index 94% rename from src/test/run-pass/binding/allow_irrefutable_let_patterns.rs rename to src/test/ui/rfc-2086-irrefutable_let_patterns/allow_irrefutable_let_patterns.rs index 866784e517c7d..c0dbde77b3f0f 100644 --- a/src/test/run-pass/binding/allow_irrefutable_let_patterns.rs +++ b/src/test/ui/rfc-2086-irrefutable_let_patterns/allow_irrefutable_let_patterns.rs @@ -9,7 +9,6 @@ // except according to those terms. // run-pass -#![feature(irrefutable_let_patterns)] // must-compile-successfully-irrefutable_let_patterns_with_gate #[allow(irrefutable_let_patterns)] diff --git a/src/test/ui/error-codes/E0162.rs b/src/test/ui/rfc-2086-irrefutable_let_patterns/deny-irrefutable-if-let.rs similarity index 68% rename from src/test/ui/error-codes/E0162.rs rename to src/test/ui/rfc-2086-irrefutable_let_patterns/deny-irrefutable-if-let.rs index e13b0af6f7977..c6ac7127211f8 100644 --- a/src/test/ui/error-codes/E0162.rs +++ b/src/test/ui/rfc-2086-irrefutable_let_patterns/deny-irrefutable-if-let.rs @@ -1,4 +1,4 @@ -// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// Copyright 2012 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -8,11 +8,9 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -struct Irrefutable(i32); - +#[deny(irrefutable_let_patterns)] fn main() { - let irr = Irrefutable(0); - if let Irrefutable(x) = irr { //~ ERROR E0162 - println!("{}", x); + if let _ = 5 { + let _x = 1; } } diff --git a/src/test/ui/rfc-2086-irrefutable_let_patterns/deny-irrefutable-if-let.stderr b/src/test/ui/rfc-2086-irrefutable_let_patterns/deny-irrefutable-if-let.stderr new file mode 100644 index 0000000000000..d3812e30398ce --- /dev/null +++ b/src/test/ui/rfc-2086-irrefutable_let_patterns/deny-irrefutable-if-let.stderr @@ -0,0 +1,16 @@ +error: irrefutable if-let pattern + --> $DIR/deny-irrefutable-if-let.rs:13:5 + | +LL | / if let _ = 5 { +LL | | let _x = 1; +LL | | } + | |_____^ + | +note: lint level defined here + --> $DIR/deny-irrefutable-if-let.rs:11:8 + | +LL | #[deny(irrefutable_let_patterns)] + | ^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/should-fail-with_gate_irrefutable_pattern_deny.rs b/src/test/ui/rfc-2086-irrefutable_let_patterns/deny-irrefutable-while-let.rs similarity index 63% rename from src/test/ui/should-fail-with_gate_irrefutable_pattern_deny.rs rename to src/test/ui/rfc-2086-irrefutable_let_patterns/deny-irrefutable-while-let.rs index 6f95f10c0d93f..598b2d90df68e 100644 --- a/src/test/ui/should-fail-with_gate_irrefutable_pattern_deny.rs +++ b/src/test/ui/rfc-2086-irrefutable_let_patterns/deny-irrefutable-while-let.rs @@ -1,4 +1,4 @@ -// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// Copyright 2012 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -8,10 +8,9 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(irrefutable_let_patterns)] - -// should-fail-irrefutable_let_patterns_with_gate +#[deny(irrefutable_let_patterns)] fn main() { - if let _ = 5 {} - //~^ ERROR irrefutable if-let pattern [irrefutable_let_patterns] + while let _ = 5 { + break; + } } diff --git a/src/test/ui/rfc-2086-irrefutable_let_patterns/deny-irrefutable-while-let.stderr b/src/test/ui/rfc-2086-irrefutable_let_patterns/deny-irrefutable-while-let.stderr new file mode 100644 index 0000000000000..8b002a59f3eb9 --- /dev/null +++ b/src/test/ui/rfc-2086-irrefutable_let_patterns/deny-irrefutable-while-let.stderr @@ -0,0 +1,16 @@ +error: irrefutable while-let pattern + --> $DIR/deny-irrefutable-while-let.rs:13:5 + | +LL | / while let _ = 5 { +LL | | break; +LL | | } + | |_____^ + | +note: lint level defined here + --> $DIR/deny-irrefutable-while-let.rs:11:8 + | +LL | #[deny(irrefutable_let_patterns)] + | ^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/should-fail-no_gate_irrefutable_if_let_pattern.stderr b/src/test/ui/should-fail-no_gate_irrefutable_if_let_pattern.stderr deleted file mode 100644 index d8570ad4e83e4..0000000000000 --- a/src/test/ui/should-fail-no_gate_irrefutable_if_let_pattern.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0162]: irrefutable if-let pattern - --> $DIR/should-fail-no_gate_irrefutable_if_let_pattern.rs:13:12 - | -LL | if let _ = 5 {} - | ^ irrefutable pattern - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0162`. diff --git a/src/test/ui/should-fail-with_gate_irrefutable_pattern_deny.stderr b/src/test/ui/should-fail-with_gate_irrefutable_pattern_deny.stderr deleted file mode 100644 index 9dc0d1968e601..0000000000000 --- a/src/test/ui/should-fail-with_gate_irrefutable_pattern_deny.stderr +++ /dev/null @@ -1,10 +0,0 @@ -error: irrefutable if-let pattern - --> $DIR/should-fail-with_gate_irrefutable_pattern_deny.rs:15:5 - | -LL | if let _ = 5 {} - | ^^^^^^^^^^^^^^^ - | - = note: #[deny(irrefutable_let_patterns)] on by default - -error: aborting due to previous error - diff --git a/src/test/ui/while-let.rs b/src/test/ui/while-let.rs index a70dcccd4e85e..957f1b116d793 100644 --- a/src/test/ui/while-let.rs +++ b/src/test/ui/while-let.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// compile-pass + fn macros() { macro_rules! foo{ ($p:pat, $e:expr, $b:block) => {{ @@ -20,16 +22,16 @@ fn macros() { }} } - foo!(a, 1, { //~ ERROR irrefutable while-let + foo!(a, 1, { //~ warning irrefutable while-let println!("irrefutable pattern"); }); - bar!(a, 1, { //~ ERROR irrefutable while-let + bar!(a, 1, { //~ warning irrefutable while-let println!("irrefutable pattern"); }); } pub fn main() { - while let a = 1 { //~ ERROR irrefutable while-let + while let a = 1 { //~ warning irrefutable while-let println!("irrefutable pattern"); } } diff --git a/src/test/ui/while-let.stderr b/src/test/ui/while-let.stderr index de4d8be212e43..d5f2b1acdb19a 100644 --- a/src/test/ui/while-let.stderr +++ b/src/test/ui/while-let.stderr @@ -1,21 +1,32 @@ -error[E0165]: irrefutable while-let pattern - --> $DIR/while-let.rs:23:10 +warning: irrefutable while-let pattern + --> $DIR/while-let.rs:16:13 | -LL | foo!(a, 1, { //~ ERROR irrefutable while-let - | ^ irrefutable pattern - -error[E0165]: irrefutable while-let pattern - --> $DIR/while-let.rs:26:10 +LL | while let $p = $e $b + | ^^^^^ +... +LL | / foo!(a, 1, { //~ warning irrefutable while-let +LL | | println!("irrefutable pattern"); +LL | | }); + | |_______- in this macro invocation | -LL | bar!(a, 1, { //~ ERROR irrefutable while-let - | ^ irrefutable pattern + = note: #[warn(irrefutable_let_patterns)] on by default -error[E0165]: irrefutable while-let pattern - --> $DIR/while-let.rs:32:15 +warning: irrefutable while-let pattern + --> $DIR/while-let.rs:16:13 | -LL | while let a = 1 { //~ ERROR irrefutable while-let - | ^ irrefutable pattern +LL | while let $p = $e $b + | ^^^^^ +... +LL | / bar!(a, 1, { //~ warning irrefutable while-let +LL | | println!("irrefutable pattern"); +LL | | }); + | |_______- in this macro invocation -error: aborting due to 3 previous errors +warning: irrefutable while-let pattern + --> $DIR/while-let.rs:34:5 + | +LL | / while let a = 1 { //~ warning irrefutable while-let +LL | | println!("irrefutable pattern"); +LL | | } + | |_____^ -For more information about this error, try `rustc --explain E0165`.