Auto merge of #88598 - estebank:type-ascription-can-die-in-a-fire, r=wesleywiser

Detect bare blocks with type ascription that were meant to be a `struct` literal

Address part of #34255.

Potential improvement: silence the other knock down errors in `issue-34255-1.rs`.
This commit is contained in:
bors 2021-09-04 01:40:36 +00:00
commit b4e8596e3e
13 changed files with 67 additions and 5 deletions

View file

@ -446,11 +446,13 @@ impl<'a> Parser<'a> {
)
.emit();
*self = snapshot;
Ok(self.mk_block(
let mut tail = self.mk_block(
vec![self.mk_stmt_err(expr.span)],
s,
lo.to(self.prev_token.span),
))
);
tail.could_be_bare_literal = true;
Ok(tail)
}
(Err(mut err), Ok(tail)) => {
// We have a block tail that contains a somehow valid type ascription expr.
@ -463,7 +465,10 @@ impl<'a> Parser<'a> {
self.consume_block(token::Brace, ConsumeClosingDelim::Yes);
Err(err)
}
(Ok(_), Ok(tail)) => Ok(tail),
(Ok(_), Ok(mut tail)) => {
tail.could_be_bare_literal = true;
Ok(tail)
}
});
}
None