Do not panic on missing close paren

Fix #58856.
This commit is contained in:
Esteban Küber 2019-03-01 16:28:04 -08:00
parent f22dca0a1b
commit 2ec7d0b228
5 changed files with 110 additions and 1 deletions

View File

@ -6332,8 +6332,10 @@ impl<'a> Parser<'a> {
&token::CloseDelim(token::Paren), sep, parse_arg_fn)?;
fn_inputs.append(&mut input);
(fn_inputs, recovered)
} else if let Err(err) = self.expect_one_of(&[], &[]) {
return Err(err);
} else {
return self.unexpected();
(vec![self_arg], true)
}
} else {
self.parse_seq_to_before_end(&token::CloseDelim(token::Paren), sep, parse_arg_fn)?

View File

@ -0,0 +1,9 @@
impl A {
//~^ ERROR cannot find type `A` in this scope
fn b(self>
//~^ ERROR expected one of `)`, `,`, or `:`, found `>`
//~| ERROR expected one of `->`, `where`, or `{`, found `>`
//~| ERROR expected one of `->`, `async`, `const`, `crate`, `default`, `existential`,
}
fn main() {}

View File

@ -0,0 +1,30 @@
error: expected one of `)`, `,`, or `:`, found `>`
--> $DIR/issue-58856-1.rs:3:14
|
LL | fn b(self>
| - ^
| | |
| | help: `)` may belong here
| unclosed delimiter
error: expected one of `->`, `where`, or `{`, found `>`
--> $DIR/issue-58856-1.rs:3:14
|
LL | fn b(self>
| ^ expected one of `->`, `where`, or `{` here
error: expected one of `->`, `async`, `const`, `crate`, `default`, `existential`, `extern`, `fn`, `pub`, `type`, `unsafe`, `where`, or `}`, found `>`
--> $DIR/issue-58856-1.rs:3:14
|
LL | fn b(self>
| ^ expected one of 13 possible tokens here
error[E0412]: cannot find type `A` in this scope
--> $DIR/issue-58856-1.rs:1:6
|
LL | impl A {
| ^ not found in this scope
error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0412`.

View File

@ -0,0 +1,13 @@
trait Howness {}
impl Howness for () {
fn how_are_you(&self -> Empty {
//~^ ERROR expected one of `)` or `,`, found `->`
//~| ERROR method `how_are_you` is not a member of trait `Howness`
//~| ERROR cannot find type `Empty` in this scope
Empty
//~^ ERROR cannot find value `Empty` in this scope
}
}
//~^ ERROR expected one of `async`, `const`, `crate`, `default`, `existential`, `extern`, `fn`,
fn main() {}

View File

@ -0,0 +1,55 @@
error: expected one of `)` or `,`, found `->`
--> $DIR/issue-58856-2.rs:3:26
|
LL | fn how_are_you(&self -> Empty {
| - -^^
| | |
| | help: `)` may belong here
| unclosed delimiter
error: expected one of `async`, `const`, `crate`, `default`, `existential`, `extern`, `fn`, `pub`, `type`, `unsafe`, or `}`, found `)`
--> $DIR/issue-58856-2.rs:10:1
|
LL | }
| - expected one of 11 possible tokens here
LL | }
| ^ unexpected token
error[E0407]: method `how_are_you` is not a member of trait `Howness`
--> $DIR/issue-58856-2.rs:3:5
|
LL | / fn how_are_you(&self -> Empty {
LL | | //~^ ERROR expected one of `)` or `,`, found `->`
LL | | //~| ERROR method `how_are_you` is not a member of trait `Howness`
LL | | //~| ERROR cannot find type `Empty` in this scope
LL | | Empty
LL | | //~^ ERROR cannot find value `Empty` in this scope
LL | | }
| |_____^ not a member of trait `Howness`
error[E0412]: cannot find type `Empty` in this scope
--> $DIR/issue-58856-2.rs:3:29
|
LL | fn how_are_you(&self -> Empty {
| ^^^^^ not found in this scope
help: possible candidates are found in other modules, you can import them into scope
|
LL | use std::io::Empty;
|
LL | use std::iter::Empty;
|
error[E0425]: cannot find value `Empty` in this scope
--> $DIR/issue-58856-2.rs:7:9
|
LL | Empty
| ^^^^^ not found in this scope
help: possible candidate is found in another module, you can import it into scope
|
LL | use std::sync::mpsc::TryRecvError::Empty;
|
error: aborting due to 5 previous errors
Some errors occurred: E0407, E0412, E0425.
For more information about an error, try `rustc --explain E0407`.