about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-01-19 18:44:20 -0800
committerEsteban Küber <esteban@kuber.com.ar>2019-01-19 19:27:49 -0800
commit3235446b397a06596063f237ae864de8d95799e9 (patch)
treea5f9b95a4cbeeadec1d1f1ad6aa4c24fffbca21a
parentd38e70036eee2187d93d8d760461a79aaa84489f (diff)
downloadrust-3235446b397a06596063f237ae864de8d95799e9.tar.gz
rust-3235446b397a06596063f237ae864de8d95799e9.zip
Accept parenthesized type args for error recovery
-rw-r--r--src/librustc/hir/lowering.rs6
-rw-r--r--src/libsyntax/ast.rs10
-rw-r--r--src/test/ui/error-codes/E0214.stderr11
-rw-r--r--src/test/ui/issues/issue-23589.rs1
-rw-r--r--src/test/ui/issues/issue-23589.stderr13
-rw-r--r--src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-1.rs1
-rw-r--r--src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-3.stderr11
-rw-r--r--src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct.rs2
8 files changed, 30 insertions, 25 deletions
diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs
index b8aeb6032ba..b7624b09eee 100644
--- a/src/librustc/hir/lowering.rs
+++ b/src/librustc/hir/lowering.rs
@@ -1826,7 +1826,11 @@ impl<'a> LoweringContext<'a> {
                         struct_span_err!(self.sess, data.span, E0214, "{}", msg)
                             .span_label(data.span, "only traits may use parentheses")
                             .emit();
-                        (hir::GenericArgs::none(), false)
+                        (self.lower_angle_bracketed_parameter_data(
+                            &data.as_angle_bracketed_args(),
+                            param_mode,
+                            itctx).0,
+                         false)
                     }
                 },
             }
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index bbcaaacbab5..d57f9247c05 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -192,6 +192,16 @@ pub struct ParenthesisedArgs {
     pub output: Option<P<Ty>>,
 }
 
+impl ParenthesisedArgs {
+    pub fn as_angle_bracketed_args(&self) -> AngleBracketedArgs {
+        AngleBracketedArgs {
+            span: self.span,
+            args: self.inputs.iter().cloned().map(|input| GenericArg::Type(input)).collect(),
+            bindings: vec![],
+        }
+    }
+}
+
 // hack to ensure that we don't try to access the private parts of `NodeId` in this module
 mod node_id_inner {
     use rustc_data_structures::indexed_vec::Idx;
diff --git a/src/test/ui/error-codes/E0214.stderr b/src/test/ui/error-codes/E0214.stderr
index f87502efe1b..08a98b1c3bf 100644
--- a/src/test/ui/error-codes/E0214.stderr
+++ b/src/test/ui/error-codes/E0214.stderr
@@ -4,13 +4,6 @@ error[E0214]: parenthesized parameters may only be used with a trait
 LL |     let v: Vec(&str) = vec!["foo"];
    |               ^^^^^^ only traits may use parentheses
 
-error[E0107]: wrong number of type arguments: expected 1, found 0
-  --> $DIR/E0214.rs:2:12
-   |
-LL |     let v: Vec(&str) = vec!["foo"];
-   |            ^^^^^^^^^ expected 1 type argument
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
 
-Some errors occurred: E0107, E0214.
-For more information about an error, try `rustc --explain E0107`.
+For more information about this error, try `rustc --explain E0214`.
diff --git a/src/test/ui/issues/issue-23589.rs b/src/test/ui/issues/issue-23589.rs
index a59710a1a3c..fb765e453dc 100644
--- a/src/test/ui/issues/issue-23589.rs
+++ b/src/test/ui/issues/issue-23589.rs
@@ -1,4 +1,5 @@
 fn main() {
     let v: Vec(&str) = vec!['1', '2'];
     //~^ ERROR parenthesized parameters may only be used with a trait
+    //~| ERROR mismatched types
 }
diff --git a/src/test/ui/issues/issue-23589.stderr b/src/test/ui/issues/issue-23589.stderr
index 15f2c524a7a..c71061606df 100644
--- a/src/test/ui/issues/issue-23589.stderr
+++ b/src/test/ui/issues/issue-23589.stderr
@@ -4,13 +4,16 @@ error[E0214]: parenthesized parameters may only be used with a trait
 LL |     let v: Vec(&str) = vec!['1', '2'];
    |               ^^^^^^ only traits may use parentheses
 
-error[E0107]: wrong number of type arguments: expected 1, found 0
-  --> $DIR/issue-23589.rs:2:12
+error[E0308]: mismatched types
+  --> $DIR/issue-23589.rs:2:29
    |
 LL |     let v: Vec(&str) = vec!['1', '2'];
-   |            ^^^^^^^^^ expected 1 type argument
+   |                             ^^^ expected &str, found char
+   |
+   = note: expected type `&str`
+              found type `char`
 
 error: aborting due to 2 previous errors
 
-Some errors occurred: E0107, E0214.
-For more information about an error, try `rustc --explain E0107`.
+Some errors occurred: E0214, E0308.
+For more information about an error, try `rustc --explain E0214`.
diff --git a/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-1.rs b/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-1.rs
index 5387dcb218c..2827e6eead5 100644
--- a/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-1.rs
+++ b/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-1.rs
@@ -7,6 +7,7 @@ struct Bar<A> {
 fn bar() {
     let x: Box<Bar()> = panic!();
     //~^ ERROR parenthesized parameters may only be used with a trait
+    //~| ERROR wrong number of type arguments: expected 1, found 0
 }
 
 fn main() { }
diff --git a/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-3.stderr b/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-3.stderr
index b4f7a97c3e5..395f6596cfd 100644
--- a/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-3.stderr
+++ b/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct-3.stderr
@@ -4,13 +4,6 @@ error[E0214]: parenthesized parameters may only be used with a trait
 LL |     let b = Bar::(isize, usize)::new(); // OK too (for the parser)
    |                ^^^^^^^^^^^^^^^^ only traits may use parentheses
 
-error[E0107]: wrong number of type arguments: expected 2, found 0
-  --> $DIR/unboxed-closure-sugar-used-on-struct-3.rs:14:13
-   |
-LL |     let b = Bar::(isize, usize)::new(); // OK too (for the parser)
-   |             ^^^^^^^^^^^^^^^^^^^^^^^^ expected 2 type arguments
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
 
-Some errors occurred: E0107, E0214.
-For more information about an error, try `rustc --explain E0107`.
+For more information about this error, try `rustc --explain E0214`.
diff --git a/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct.rs b/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct.rs
index e795650447c..6da53585c9c 100644
--- a/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct.rs
+++ b/src/test/ui/unboxed-closures/unboxed-closure-sugar-used-on-struct.rs
@@ -6,7 +6,7 @@ struct Bar<A> {
 
 fn foo(b: Box<Bar()>) {
     //~^ ERROR parenthesized parameters may only be used with a trait
-    //~| ERROR the type placeholder `_` is not allowed within types on item signatures
+    //~| ERROR wrong number of type arguments: expected 1, found 0
 }
 
 fn main() { }