Change:
<!-- Thank you for filing a bug report! Please provide a short summary of the bug, along with any information you feel relevant to replicating the bug. --I tried this code : I expected to see this happen: The compiler rejects all these expressions as the lifetimes are in a nonsensical position. Instead, this happened: The compiler accepted the expressions without saying anything This behavior seems to occur since 1.61. 60 and below properly reject the code.
This very likely regressed in , I'll put up a fix in like 30 mins.
For the record -- Bisection points at: found 9 bors merge commits in the specified range commit[0] 2022-02-27UTC: Auto merge of - scottmcm:cfg-out-miri-from-swap, r=oli-obk commit[1] 2022-02-27UTC: Auto merge of - erikdesjardins:more-noundef, r=nikic commit[2] 2022-02-28UTC: Auto merge of - matthiaskrgr:rollup-1jsj0wu, r=matthiaskrgr commit[3] 2022-02-28UTC: Auto merge of - RalfJung:miri, r=RalfJung commit[4] 2022-02-28UTC: Auto merge of - erikdesjardins:more-more-noundef, r=nikic commit[5] 2022-02-28UTC: Auto merge of - cjgillot:inline-fresh-expn, r=oli-obk commit[6] 2022-02-28UTC: Auto merge of - psumbera:sparc64-abi-fix2, r=nagisa commit[7] 2022-02-28UTC: Auto merge of - matthiaskrgr:rollup-d8rj2xv, r=matthiaskrgr commit[8] 2022-02-28UTC: Auto merge of - matthiaskrgr:rollup-xv9y98j, r=matthiaskrgr
label +T-compiler +A-parser +A-lifetimes

Discussion:
} pub(crate) fn maybe_recover_unexpected_block_label(&mut self) -> bool { <del> let Some(label) = self.eat_label().filter(|_| { self.eat(&token::Colon) && self.token.kind == token::OpenDelim(Delimiter::Brace) }) else { </del> <ins> // Check for `'a : {` if !(self.check_lifetime() && self.look_ahead(1, |tok| tok.kind == token::Colon) && self.look_ahead(2, |tok| tok.kind == token::OpenDelim(Delimiter::Brace))) { </ins> return false; <del> }; </del> <ins> } let label = self.eat_label().expect("just checked if a label exists"); self.bump(); // eat `:` </ins> let span = label.ident.span.to(self.prev_token.span); let mut err = self.struct_span_err(span, "block label not supported here"); err.span_label(span, "not supported here");

<ins> fn a() { if let () = () 'a {} //~^ ERROR labeled expression must be followed by `:` //~| ERROR expected `{`, found `'a` } fn b() { if true 'a {} //~^ ERROR labeled expression must be followed by `:` //~| ERROR expected `{`, found `'a` } fn c() { loop 'a {} //~^ ERROR labeled expression must be followed by `:` //~| ERROR expected `{`, found `'a` } fn d() { while true 'a {} //~^ ERROR labeled expression must be followed by `:` //~| ERROR expected `{`, found `'a` } fn e() { while let () = () 'a {} //~^ ERROR labeled expression must be followed by `:` //~| ERROR expected `{`, found `'a` } fn f() { for _ in 0..0 'a {} //~^ ERROR labeled expression must be followed by `:` //~| ERROR expected `{`, found `'a` } fn g() { unsafe 'a {} //~^ ERROR labeled expression must be followed by `:` //~| ERROR expected `{`, found `'a` } fn main() {} </ins>

<ins> error: labeled expression must be followed by `:` --> $DIR/label-after-block-like.rs:2:20 | LL |     if let () = () 'a {} |                    ---^^ |                    | | |                    | help: add `:` after the label |                    the label | = note: labels are used before loops and blocks, allowing e.g., `break 'label` to them error: expected `{`, found `'a` --> $DIR/label-after-block-like.rs:2:20 | LL |     if let () = () 'a {} |                    ^^ expected `{` | note: the `if` expression is missing a block after this condition --> $DIR/label-after-block-like.rs:2:8 | LL |     if let () = () 'a {} |        ^^^^^^^^^^^ help: try placing this code inside a block | LL |     if let () = () { 'a {} } |                    +       + error: labeled expression must be followed by `:` --> $DIR/label-after-block-like.rs:8:13 | LL |     if true 'a {} |             ---^^ |             | | |             | help: add `:` after the label |             the label | = note: labels are used before loops and blocks, allowing e.g., `break 'label` to them error: expected `{`, found `'a` --> $DIR/label-after-block-like.rs:8:13 | LL |     if true 'a {} |             ^^ expected `{` | note: the `if` expression is missing a block after this condition --> $DIR/label-after-block-like.rs:8:8 | LL |     if true 'a {} |        ^^^^ help: try placing this code inside a block | LL |     if true { 'a {} } |             +       + error: labeled expression must be followed by `:` --> $DIR/label-after-block-like.rs:14:10 | LL |     loop 'a {} |          ---^^ |          | | |          | help: add `:` after the label |          the label | = note: labels are used before loops and blocks, allowing e.g., `break 'label` to them error: expected `{`, found `'a` --> $DIR/label-after-block-like.rs:14:10 | LL |     loop 'a {} |     ---- ^^ expected `{` |     | |     while parsing this `loop` expression | help: try placing this code inside a block | LL |     loop { 'a {} } |          +       + error: labeled expression must be followed by `:` --> $DIR/label-after-block-like.rs:20:16 | LL |     while true 'a {} |                ---^^ |                | | |                | help: add `:` after the label |                the label | = note: labels are used before loops and blocks, allowing e.g., `break 'label` to them error: expected `{`, found `'a` --> $DIR/label-after-block-like.rs:20:16 | LL |     while true 'a {} |     ----- ---- ^^ expected `{` |     |     | |     |     this `while` condition successfully parsed |     while parsing the body of this `while` expression | help: try placing this code inside a block | LL |     while true { 'a {} } |                +       + error: labeled expression must be followed by `:` --> $DIR/label-after-block-like.rs:26:23 | LL |     while let () = () 'a {} |                       ---^^ |                       | | |                       | help: add `:` after the label |                       the label | = note: labels are used before loops and blocks, allowing e.g., `break 'label` to them error: expected `{`, found `'a` --> $DIR/label-after-block-like.rs:26:23 | LL |     while let () = () 'a {} |     ----- ----------- ^^ expected `{` |     |     | |     |     this `while` condition successfully parsed |     while parsing the body of this `while` expression | help: try placing this code inside a block | LL |     while let () = () { 'a {} } |                       +       + error: labeled expression must be followed by `:` --> $DIR/label-after-block-like.rs:32:19 | LL |     for _ in 0..0 'a {} |                   ---^^ |                   | | |                   | help: add `:` after the label |                   the label | = note: labels are used before loops and blocks, allowing e.g., `break 'label` to them error: expected `{`, found `'a` --> $DIR/label-after-block-like.rs:32:19 | LL |     for _ in 0..0 'a {} |                   ^^ expected `{` | help: try placing this code inside a block | LL |     for _ in 0..0 { 'a {} } |                   +       + error: labeled expression must be followed by `:` --> $DIR/label-after-block-like.rs:38:12 | LL |     unsafe 'a {} |            ---^^ |            | | |            | help: add `:` after the label |            the label | = note: labels are used before loops and blocks, allowing e.g., `break 'label` to them error: expected `{`, found `'a` --> $DIR/label-after-block-like.rs:38:12 | LL |     unsafe 'a {} |     ------ ^^ expected `{` |     | |     while parsing this `unsafe` expression | help: try placing this code inside a block | LL |     unsafe { 'a {} } |            +       + error: aborting due to 14 previous errors </ins>