about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2020-10-25 12:13:27 -0700
committerEsteban Küber <esteban@kuber.com.ar>2020-10-25 12:13:27 -0700
commit040f56881500279889fd847b767f5fde14b21028 (patch)
tree2be89807edcd06ad45c36166f2125cf57fed548e
parent07a63e6d1fabf3560e8e1e17c1d56b10a06152d9 (diff)
downloadrust-040f56881500279889fd847b767f5fde14b21028.tar.gz
rust-040f56881500279889fd847b767f5fde14b21028.zip
Rely on regular "expected"/"found" parser error for `fn`
-rw-r--r--compiler/rustc_parse/src/parser/diagnostics.rs8
-rw-r--r--compiler/rustc_parse/src/parser/item.rs9
-rw-r--r--src/test/ui/issues/issue-39616.rs2
-rw-r--r--src/test/ui/issues/issue-39616.stderr4
-rw-r--r--src/test/ui/issues/issue-58856-1.rs2
-rw-r--r--src/test/ui/issues/issue-58856-1.stderr4
-rw-r--r--src/test/ui/parser/fn-colon-return-type.rs5
-rw-r--r--src/test/ui/parser/fn-colon-return-type.stderr8
-rw-r--r--src/test/ui/parser/issue-24780.rs2
-rw-r--r--src/test/ui/parser/issue-24780.stderr4
-rw-r--r--src/test/ui/parser/issue-6610.rs2
-rw-r--r--src/test/ui/parser/issue-6610.stderr4
-rw-r--r--src/test/ui/parser/missing_right_paren.stderr4
-rw-r--r--src/test/ui/parser/not-a-pred.rs3
-rw-r--r--src/test/ui/parser/not-a-pred.stderr6
15 files changed, 36 insertions, 31 deletions
diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs
index 1ea01d95a13..6e4ae960b64 100644
--- a/compiler/rustc_parse/src/parser/diagnostics.rs
+++ b/compiler/rustc_parse/src/parser/diagnostics.rs
@@ -1550,14 +1550,6 @@ impl<'a> Parser<'a> {
         }
     }
 
-    pub(super) fn expected_semi_or_open_brace<T>(&mut self) -> PResult<'a, T> {
-        let token_str = super::token_descr(&self.token);
-        let msg = &format!("expected `;` or `{{`, found {}", token_str);
-        let mut err = self.struct_span_err(self.token.span, msg);
-        err.span_label(self.token.span, "expected `;` or `{`");
-        Err(err)
-    }
-
     pub(super) fn eat_incorrect_doc_comment_for_param_type(&mut self) {
         if let token::DocComment(..) = self.token.kind {
             self.struct_span_err(
diff --git a/compiler/rustc_parse/src/parser/item.rs b/compiler/rustc_parse/src/parser/item.rs
index 4ad259715bd..2b143cd7696 100644
--- a/compiler/rustc_parse/src/parser/item.rs
+++ b/compiler/rustc_parse/src/parser/item.rs
@@ -1551,10 +1551,9 @@ impl<'a> Parser<'a> {
         attrs: &mut Vec<Attribute>,
         sig_hi: &mut Span,
     ) -> PResult<'a, Option<P<Block>>> {
-        let (inner_attrs, body) = if self.check(&token::Semi) {
+        let (inner_attrs, body) = if self.eat(&token::Semi) {
             // Include the trailing semicolon in the span of the signature
-            *sig_hi = self.token.span;
-            self.bump(); // `;`
+            *sig_hi = self.prev_token.span;
             (Vec::new(), None)
         } else if self.check(&token::OpenDelim(token::Brace)) || self.token.is_whole_block() {
             self.parse_inner_attrs_and_block().map(|(attrs, body)| (attrs, Some(body)))?
@@ -1574,7 +1573,9 @@ impl<'a> Parser<'a> {
                 .emit();
             (Vec::new(), Some(self.mk_block_err(span)))
         } else {
-            return self.expected_semi_or_open_brace();
+            return self
+                .expected_one_of_not_found(&[], &[token::Semi, token::OpenDelim(token::Brace)])
+                .map(|_| None);
         };
         attrs.extend(inner_attrs);
         Ok(body)
diff --git a/src/test/ui/issues/issue-39616.rs b/src/test/ui/issues/issue-39616.rs
index 428856a36b4..9aebb4e2f48 100644
--- a/src/test/ui/issues/issue-39616.rs
+++ b/src/test/ui/issues/issue-39616.rs
@@ -1,4 +1,4 @@
 fn foo(a: [0; 1]) {} //~ ERROR expected type, found `0`
-//~| ERROR expected `;` or `{`, found `]`
+//~| ERROR expected one of `)`, `,`, `->`, `;`, `where`, or `{`, found `]`
 
 fn main() {}
diff --git a/src/test/ui/issues/issue-39616.stderr b/src/test/ui/issues/issue-39616.stderr
index ced58274661..fa8ef50a073 100644
--- a/src/test/ui/issues/issue-39616.stderr
+++ b/src/test/ui/issues/issue-39616.stderr
@@ -4,11 +4,11 @@ error: expected type, found `0`
 LL | fn foo(a: [0; 1]) {}
    |            ^ expected type
 
-error: expected `;` or `{`, found `]`
+error: expected one of `)`, `,`, `->`, `;`, `where`, or `{`, found `]`
   --> $DIR/issue-39616.rs:1:16
    |
 LL | fn foo(a: [0; 1]) {}
-   |                ^ expected `;` or `{`
+   |                ^ expected one of `)`, `,`, `->`, `;`, `where`, or `{`
 
 error: aborting due to 2 previous errors
 
diff --git a/src/test/ui/issues/issue-58856-1.rs b/src/test/ui/issues/issue-58856-1.rs
index 8b1a39a94e6..332a3014416 100644
--- a/src/test/ui/issues/issue-58856-1.rs
+++ b/src/test/ui/issues/issue-58856-1.rs
@@ -2,7 +2,7 @@ impl A {
     //~^ ERROR cannot find type `A` in this scope
     fn b(self>
     //~^ ERROR expected one of `)`, `,`, or `:`, found `>`
-    //~| ERROR expected `;` or `{`, found `>`
+    //~| ERROR expected one of `->`, `;`, `where`, or `{`, found `>`
 }
 
 fn main() {}
diff --git a/src/test/ui/issues/issue-58856-1.stderr b/src/test/ui/issues/issue-58856-1.stderr
index a8db8e8b41a..f1abb40ed7a 100644
--- a/src/test/ui/issues/issue-58856-1.stderr
+++ b/src/test/ui/issues/issue-58856-1.stderr
@@ -6,14 +6,14 @@ LL |     fn b(self>
    |         |
    |         unclosed delimiter
 
-error: expected `;` or `{`, found `>`
+error: expected one of `->`, `;`, `where`, or `{`, found `>`
   --> $DIR/issue-58856-1.rs:3:14
    |
 LL | impl A {
    |        - while parsing this item list starting here
 LL |
 LL |     fn b(self>
-   |              ^ expected `;` or `{`
+   |              ^ expected one of `->`, `;`, `where`, or `{`
 ...
 LL | }
    | - the item list ends here
diff --git a/src/test/ui/parser/fn-colon-return-type.rs b/src/test/ui/parser/fn-colon-return-type.rs
new file mode 100644
index 00000000000..c791fb3ae67
--- /dev/null
+++ b/src/test/ui/parser/fn-colon-return-type.rs
@@ -0,0 +1,5 @@
+fn foo(x: i32): i32 { //~ ERROR expected one of `->`, `;`, `where`, or `{`, found `:`
+    x
+}
+
+fn main() {}
diff --git a/src/test/ui/parser/fn-colon-return-type.stderr b/src/test/ui/parser/fn-colon-return-type.stderr
new file mode 100644
index 00000000000..92df9bc60bd
--- /dev/null
+++ b/src/test/ui/parser/fn-colon-return-type.stderr
@@ -0,0 +1,8 @@
+error: expected one of `->`, `;`, `where`, or `{`, found `:`
+  --> $DIR/fn-colon-return-type.rs:1:15
+   |
+LL | fn foo(x: i32): i32 {
+   |               ^ expected one of `->`, `;`, `where`, or `{`
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/parser/issue-24780.rs b/src/test/ui/parser/issue-24780.rs
index 8b46aa2bf22..568a6c5f05c 100644
--- a/src/test/ui/parser/issue-24780.rs
+++ b/src/test/ui/parser/issue-24780.rs
@@ -3,6 +3,6 @@
 // expected one of ..., `>`, ... found `>`
 
 fn foo() -> Vec<usize>> {
-    //~^ ERROR expected `;` or `{`, found `>`
+    //~^ ERROR expected one of `!`, `+`, `::`, `;`, `where`, or `{`, found `>`
     Vec::new()
 }
diff --git a/src/test/ui/parser/issue-24780.stderr b/src/test/ui/parser/issue-24780.stderr
index d65a5f44873..bdd089bb7a1 100644
--- a/src/test/ui/parser/issue-24780.stderr
+++ b/src/test/ui/parser/issue-24780.stderr
@@ -1,8 +1,8 @@
-error: expected `;` or `{`, found `>`
+error: expected one of `!`, `+`, `::`, `;`, `where`, or `{`, found `>`
   --> $DIR/issue-24780.rs:5:23
    |
 LL | fn foo() -> Vec<usize>> {
-   |                       ^ expected `;` or `{`
+   |                       ^ expected one of `!`, `+`, `::`, `;`, `where`, or `{`
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/parser/issue-6610.rs b/src/test/ui/parser/issue-6610.rs
index 2dfa08fe82d..9ed5a61220b 100644
--- a/src/test/ui/parser/issue-6610.rs
+++ b/src/test/ui/parser/issue-6610.rs
@@ -1,3 +1,3 @@
-trait Foo { fn a() } //~ ERROR expected `;` or `{`, found `}`
+trait Foo { fn a() } //~ ERROR expected one of `->`, `;`, `where`, or `{`, found `}`
 
 fn main() {}
diff --git a/src/test/ui/parser/issue-6610.stderr b/src/test/ui/parser/issue-6610.stderr
index a9804208946..acbecfded4b 100644
--- a/src/test/ui/parser/issue-6610.stderr
+++ b/src/test/ui/parser/issue-6610.stderr
@@ -1,10 +1,10 @@
-error: expected `;` or `{`, found `}`
+error: expected one of `->`, `;`, `where`, or `{`, found `}`
   --> $DIR/issue-6610.rs:1:20
    |
 LL | trait Foo { fn a() }
    |           -        ^
    |           |        |
-   |           |        expected `;` or `{`
+   |           |        expected one of `->`, `;`, `where`, or `{`
    |           |        the item list ends here
    |           while parsing this item list starting here
 
diff --git a/src/test/ui/parser/missing_right_paren.stderr b/src/test/ui/parser/missing_right_paren.stderr
index c1ceb81a07c..22e1c2f97e7 100644
--- a/src/test/ui/parser/missing_right_paren.stderr
+++ b/src/test/ui/parser/missing_right_paren.stderr
@@ -22,11 +22,11 @@ error: expected one of `:` or `|`, found `)`
 LL | fn main((ؼ
    |           ^ expected one of `:` or `|`
 
-error: expected `;` or `{`, found `<eof>`
+error: expected one of `->`, `;`, `where`, or `{`, found `<eof>`
   --> $DIR/missing_right_paren.rs:3:11
    |
 LL | fn main((ؼ
-   |           ^ expected `;` or `{`
+   |           ^ expected one of `->`, `;`, `where`, or `{`
 
 error: aborting due to 4 previous errors
 
diff --git a/src/test/ui/parser/not-a-pred.rs b/src/test/ui/parser/not-a-pred.rs
index e6a02d5fc56..1b3d9bf66bb 100644
--- a/src/test/ui/parser/not-a-pred.rs
+++ b/src/test/ui/parser/not-a-pred.rs
@@ -1,6 +1,5 @@
-// error-pattern: lt
-
 fn f(a: isize, b: isize) : lt(a, b) { }
+//~^ ERROR expected one of `->`, `;`, `where`, or `{`, found `:`
 
 fn lt(a: isize, b: isize) { }
 
diff --git a/src/test/ui/parser/not-a-pred.stderr b/src/test/ui/parser/not-a-pred.stderr
index dce54655fa0..ec413c5594c 100644
--- a/src/test/ui/parser/not-a-pred.stderr
+++ b/src/test/ui/parser/not-a-pred.stderr
@@ -1,8 +1,8 @@
-error: expected `;` or `{`, found `:`
-  --> $DIR/not-a-pred.rs:3:26
+error: expected one of `->`, `;`, `where`, or `{`, found `:`
+  --> $DIR/not-a-pred.rs:1:26
    |
 LL | fn f(a: isize, b: isize) : lt(a, b) { }
-   |                          ^ expected `;` or `{`
+   |                          ^ expected one of `->`, `;`, `where`, or `{`
 
 error: aborting due to previous error