diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2020-10-28 01:21:24 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-28 01:21:24 +0100 |
| commit | 892ebe9afe9d299a5ff22b9dec1a84a653b85f78 (patch) | |
| tree | 9e0ee9377cbb36f710bfceb062aa74cf39249ab4 /compiler/rustc_parse/src/parser/ty.rs | |
| parent | 1a64e570c6d3bf19a387f96bcb0bd09e51caee22 (diff) | |
| parent | ff61949860813247b26d96eb374b41b46becba81 (diff) | |
| download | rust-892ebe9afe9d299a5ff22b9dec1a84a653b85f78.tar.gz rust-892ebe9afe9d299a5ff22b9dec1a84a653b85f78.zip | |
Rollup merge of #78379 - estebank:fn-signature-parse, r=varkor
Tweak invalid `fn` header and body parsing * Rely on regular "expected"/"found" parser error for `fn`, fix #77115 * Recover empty `fn` bodies when encountering `}` * Recover trailing `>` in return types * Recover from non-type in array type `[<BAD TOKEN>; LEN]`
Diffstat (limited to 'compiler/rustc_parse/src/parser/ty.rs')
| -rw-r--r-- | compiler/rustc_parse/src/parser/ty.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/compiler/rustc_parse/src/parser/ty.rs b/compiler/rustc_parse/src/parser/ty.rs index d42a786a18f..7a6ebca4e15 100644 --- a/compiler/rustc_parse/src/parser/ty.rs +++ b/compiler/rustc_parse/src/parser/ty.rs @@ -265,7 +265,19 @@ impl<'a> Parser<'a> { /// Parses an array (`[TYPE; EXPR]`) or slice (`[TYPE]`) type. /// The opening `[` bracket is already eaten. fn parse_array_or_slice_ty(&mut self) -> PResult<'a, TyKind> { - let elt_ty = self.parse_ty()?; + let elt_ty = match self.parse_ty() { + Ok(ty) => ty, + Err(mut err) + if self.look_ahead(1, |t| t.kind == token::CloseDelim(token::Bracket)) + | self.look_ahead(1, |t| t.kind == token::Semi) => + { + // Recover from `[LIT; EXPR]` and `[LIT]` + self.bump(); + err.emit(); + self.mk_ty(self.prev_token.span, TyKind::Err) + } + Err(err) => return Err(err), + }; let ty = if self.eat(&token::Semi) { TyKind::Array(elt_ty, self.parse_anon_const_expr()?) } else { |
