Skip to content

Commit

Permalink
Do not panic on missing close paren
Browse files Browse the repository at this point in the history
  • Loading branch information
estebank authored and pietroalbini committed Mar 16, 2019
1 parent 363024d commit d954246
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6321,8 +6321,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)?
Expand Down
9 changes: 9 additions & 0 deletions src/test/ui/issues/issue-58856-1.rs
Original file line number Diff line number Diff line change
@@ -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() {}
30 changes: 30 additions & 0 deletions src/test/ui/issues/issue-58856-1.stderr
Original file line number Diff line number Diff line change
@@ -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`.
13 changes: 13 additions & 0 deletions src/test/ui/issues/issue-58856-2.rs
Original file line number Diff line number Diff line change
@@ -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() {}
55 changes: 55 additions & 0 deletions src/test/ui/issues/issue-58856-2.stderr
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit d954246

Please sign in to comment.