about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorFabian Wolff <fabian.wolff@alumni.ethz.ch>2021-06-11 20:12:40 +0200
committerFabian Wolff <fabian.wolff@alumni.ethz.ch>2021-06-11 23:05:17 +0200
commit79dc9a76a6272dc2e080237de27406b1456d7c2c (patch)
treecfb55c16266afa3759733d73fbe883b6b499fb25 /src/test
parentf687d5c43a0c90afba6d3fddab7665772bb0664a (diff)
Suggest a FnPtr type if a FnDef type is found
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/suggestions/unnamable-types.rs14
-rw-r--r--src/test/ui/suggestions/unnamable-types.stderr46
2 files changed, 33 insertions, 27 deletions
diff --git a/src/test/ui/suggestions/unnamable-types.rs b/src/test/ui/suggestions/unnamable-types.rs
index ed70bcf5484..5d0616443e5 100644
--- a/src/test/ui/suggestions/unnamable-types.rs
+++ b/src/test/ui/suggestions/unnamable-types.rs
@@ -13,21 +13,27 @@ static B: _ = "abc";
 //~| HELP: replace with the correct type
 
 
+// FIXME: this should also suggest a function pointer, as the closure is non-capturing
 const C: _ = || 42;
 //~^ ERROR: the type placeholder `_` is not allowed within types on item signatures
 //~| NOTE: not allowed in type signatures
 //~| NOTE: however, the inferred type
 
 struct S<T> { t: T }
-const D = S { t: || -> i32 { 42 } };
+const D = S { t: { let i = 0; move || -> i32 { i } } };
 //~^ ERROR: missing type for `const` item
 //~| NOTE: however, the inferred type
 
+
 fn foo() -> i32 { 42 }
-const E = S { t: foo };
+const E = foo;
 //~^ ERROR: missing type for `const` item
-//~| NOTE: however, the inferred type
+//~| HELP: provide a type for the item
+const F = S { t: foo };
+//~^ ERROR: missing type for `const` item
+//~| HELP: provide a type for the item
+
 
-const F = || -> i32 { yield 0; return 1; };
+const G = || -> i32 { yield 0; return 1; };
 //~^ ERROR: missing type for `const` item
 //~| NOTE: however, the inferred type
diff --git a/src/test/ui/suggestions/unnamable-types.stderr b/src/test/ui/suggestions/unnamable-types.stderr
index 8082707fd3c..2c8166781bf 100644
--- a/src/test/ui/suggestions/unnamable-types.stderr
+++ b/src/test/ui/suggestions/unnamable-types.stderr
@@ -14,53 +14,53 @@ LL | static B: _ = "abc";
    |           help: replace with the correct type: `&str`
 
 error[E0121]: the type placeholder `_` is not allowed within types on item signatures
-  --> $DIR/unnamable-types.rs:16:10
+  --> $DIR/unnamable-types.rs:17:10
    |
 LL | const C: _ = || 42;
    |          ^ not allowed in type signatures
    |
-note: however, the inferred type `[closure@$DIR/unnamable-types.rs:16:14: 16:19]` cannot be named
-  --> $DIR/unnamable-types.rs:16:14
+note: however, the inferred type `[closure@$DIR/unnamable-types.rs:17:14: 17:19]` cannot be named
+  --> $DIR/unnamable-types.rs:17:14
    |
 LL | const C: _ = || 42;
    |              ^^^^^
 
 error: missing type for `const` item
-  --> $DIR/unnamable-types.rs:22:7
+  --> $DIR/unnamable-types.rs:23:7
    |
-LL | const D = S { t: || -> i32 { 42 } };
+LL | const D = S { t: { let i = 0; move || -> i32 { i } } };
    |       ^
    |
-note: however, the inferred type `S<[closure@$DIR/unnamable-types.rs:22:18: 22:34]>` cannot be named
-  --> $DIR/unnamable-types.rs:22:11
+note: however, the inferred type `S<[closure@$DIR/unnamable-types.rs:23:31: 23:51]>` cannot be named
+  --> $DIR/unnamable-types.rs:23:11
    |
-LL | const D = S { t: || -> i32 { 42 } };
-   |           ^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | const D = S { t: { let i = 0; move || -> i32 { i } } };
+   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error: missing type for `const` item
-  --> $DIR/unnamable-types.rs:27:7
+  --> $DIR/unnamable-types.rs:29:7
    |
-LL | const E = S { t: foo };
-   |       ^
-   |
-note: however, the inferred type `S<fn() -> i32 {foo}>` cannot be named
-  --> $DIR/unnamable-types.rs:27:11
+LL | const E = foo;
+   |       ^ help: provide a type for the item: `E: fn() -> i32`
+
+error: missing type for `const` item
+  --> $DIR/unnamable-types.rs:32:7
    |
-LL | const E = S { t: foo };
-   |           ^^^^^^^^^^^^
+LL | const F = S { t: foo };
+   |       ^ help: provide a type for the item: `F: S<fn() -> i32>`
 
 error: missing type for `const` item
-  --> $DIR/unnamable-types.rs:31:7
+  --> $DIR/unnamable-types.rs:37:7
    |
-LL | const F = || -> i32 { yield 0; return 1; };
+LL | const G = || -> i32 { yield 0; return 1; };
    |       ^
    |
-note: however, the inferred type `[generator@$DIR/unnamable-types.rs:31:11: 31:43 {i32, ()}]` cannot be named
-  --> $DIR/unnamable-types.rs:31:11
+note: however, the inferred type `[generator@$DIR/unnamable-types.rs:37:11: 37:43 {i32, ()}]` cannot be named
+  --> $DIR/unnamable-types.rs:37:11
    |
-LL | const F = || -> i32 { yield 0; return 1; };
+LL | const G = || -> i32 { yield 0; return 1; };
    |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-error: aborting due to 6 previous errors
+error: aborting due to 7 previous errors
 
 For more information about this error, try `rustc --explain E0121`.