-
Notifications
You must be signed in to change notification settings - Fork 12.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of #70421 - Centril:recover-const-async-fn-ptr, r=estebank
parse: recover on `const fn()` / `async fn()` Recover on `const fn()` and `async fn()` function pointers, suggesting to remove the qualifier. For example: ``` error: an `fn` pointer type cannot be `async` --> $DIR/recover-const-async-fn-ptr.rs:6:11 | LL | type T3 = async fn(); | -----^^^^^ | | | `async` because of this | help: remove the `async` qualifier ``` r? @estebank
- Loading branch information
Showing
7 changed files
with
215 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
src/test/ui/keyword/extern/keyword-extern-as-identifier-type.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
type A = extern::foo::bar; //~ ERROR expected `fn`, found `::` | ||
type A = extern::foo::bar; //~ ERROR expected type, found keyword `extern` | ||
|
||
fn main() {} |
6 changes: 3 additions & 3 deletions
6
src/test/ui/keyword/extern/keyword-extern-as-identifier-type.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,8 @@ | ||
error: expected `fn`, found `::` | ||
--> $DIR/keyword-extern-as-identifier-type.rs:1:16 | ||
error: expected type, found keyword `extern` | ||
--> $DIR/keyword-extern-as-identifier-type.rs:1:10 | ||
| | ||
LL | type A = extern::foo::bar; | ||
| ^^ expected `fn` | ||
| ^^^^^^ expected type | ||
|
||
error: aborting due to previous error | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
// edition:2018 | ||
|
||
type T0 = const fn(); //~ ERROR an `fn` pointer type cannot be `const` | ||
type T1 = const extern "C" fn(); //~ ERROR an `fn` pointer type cannot be `const` | ||
type T2 = const unsafe extern fn(); //~ ERROR an `fn` pointer type cannot be `const` | ||
type T3 = async fn(); //~ ERROR an `fn` pointer type cannot be `async` | ||
type T4 = async extern fn(); //~ ERROR an `fn` pointer type cannot be `async` | ||
type T5 = async unsafe extern "C" fn(); //~ ERROR an `fn` pointer type cannot be `async` | ||
type T6 = const async unsafe extern "C" fn(); | ||
//~^ ERROR an `fn` pointer type cannot be `const` | ||
//~| ERROR an `fn` pointer type cannot be `async` | ||
|
||
type FT0 = for<'a> const fn(); //~ ERROR an `fn` pointer type cannot be `const` | ||
type FT1 = for<'a> const extern "C" fn(); //~ ERROR an `fn` pointer type cannot be `const` | ||
type FT2 = for<'a> const unsafe extern fn(); //~ ERROR an `fn` pointer type cannot be `const` | ||
type FT3 = for<'a> async fn(); //~ ERROR an `fn` pointer type cannot be `async` | ||
type FT4 = for<'a> async extern fn(); //~ ERROR an `fn` pointer type cannot be `async` | ||
type FT5 = for<'a> async unsafe extern "C" fn(); //~ ERROR an `fn` pointer type cannot be `async` | ||
type FT6 = for<'a> const async unsafe extern "C" fn(); | ||
//~^ ERROR an `fn` pointer type cannot be `const` | ||
//~| ERROR an `fn` pointer type cannot be `async` | ||
|
||
fn main() { | ||
let _recovery_witness: () = 0; //~ ERROR mismatched types | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
error: an `fn` pointer type cannot be `const` | ||
--> $DIR/recover-const-async-fn-ptr.rs:3:11 | ||
| | ||
LL | type T0 = const fn(); | ||
| -----^^^^^ | ||
| | | ||
| `const` because of this | ||
| help: remove the `const` qualifier | ||
|
||
error: an `fn` pointer type cannot be `const` | ||
--> $DIR/recover-const-async-fn-ptr.rs:4:11 | ||
| | ||
LL | type T1 = const extern "C" fn(); | ||
| -----^^^^^^^^^^^^^^^^ | ||
| | | ||
| `const` because of this | ||
| help: remove the `const` qualifier | ||
|
||
error: an `fn` pointer type cannot be `const` | ||
--> $DIR/recover-const-async-fn-ptr.rs:5:11 | ||
| | ||
LL | type T2 = const unsafe extern fn(); | ||
| -----^^^^^^^^^^^^^^^^^^^ | ||
| | | ||
| `const` because of this | ||
| help: remove the `const` qualifier | ||
|
||
error: an `fn` pointer type cannot be `async` | ||
--> $DIR/recover-const-async-fn-ptr.rs:6:11 | ||
| | ||
LL | type T3 = async fn(); | ||
| -----^^^^^ | ||
| | | ||
| `async` because of this | ||
| help: remove the `async` qualifier | ||
|
||
error: an `fn` pointer type cannot be `async` | ||
--> $DIR/recover-const-async-fn-ptr.rs:7:11 | ||
| | ||
LL | type T4 = async extern fn(); | ||
| -----^^^^^^^^^^^^ | ||
| | | ||
| `async` because of this | ||
| help: remove the `async` qualifier | ||
|
||
error: an `fn` pointer type cannot be `async` | ||
--> $DIR/recover-const-async-fn-ptr.rs:8:11 | ||
| | ||
LL | type T5 = async unsafe extern "C" fn(); | ||
| -----^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | | ||
| `async` because of this | ||
| help: remove the `async` qualifier | ||
|
||
error: an `fn` pointer type cannot be `const` | ||
--> $DIR/recover-const-async-fn-ptr.rs:9:11 | ||
| | ||
LL | type T6 = const async unsafe extern "C" fn(); | ||
| -----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | | ||
| `const` because of this | ||
| help: remove the `const` qualifier | ||
|
||
error: an `fn` pointer type cannot be `async` | ||
--> $DIR/recover-const-async-fn-ptr.rs:9:11 | ||
| | ||
LL | type T6 = const async unsafe extern "C" fn(); | ||
| ^^^^^^-----^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | | ||
| `async` because of this | ||
| help: remove the `async` qualifier | ||
|
||
error: an `fn` pointer type cannot be `const` | ||
--> $DIR/recover-const-async-fn-ptr.rs:13:12 | ||
| | ||
LL | type FT0 = for<'a> const fn(); | ||
| ^^^^^^^^-----^^^^^ | ||
| | | ||
| `const` because of this | ||
| help: remove the `const` qualifier | ||
|
||
error: an `fn` pointer type cannot be `const` | ||
--> $DIR/recover-const-async-fn-ptr.rs:14:12 | ||
| | ||
LL | type FT1 = for<'a> const extern "C" fn(); | ||
| ^^^^^^^^-----^^^^^^^^^^^^^^^^ | ||
| | | ||
| `const` because of this | ||
| help: remove the `const` qualifier | ||
|
||
error: an `fn` pointer type cannot be `const` | ||
--> $DIR/recover-const-async-fn-ptr.rs:15:12 | ||
| | ||
LL | type FT2 = for<'a> const unsafe extern fn(); | ||
| ^^^^^^^^-----^^^^^^^^^^^^^^^^^^^ | ||
| | | ||
| `const` because of this | ||
| help: remove the `const` qualifier | ||
|
||
error: an `fn` pointer type cannot be `async` | ||
--> $DIR/recover-const-async-fn-ptr.rs:16:12 | ||
| | ||
LL | type FT3 = for<'a> async fn(); | ||
| ^^^^^^^^-----^^^^^ | ||
| | | ||
| `async` because of this | ||
| help: remove the `async` qualifier | ||
|
||
error: an `fn` pointer type cannot be `async` | ||
--> $DIR/recover-const-async-fn-ptr.rs:17:12 | ||
| | ||
LL | type FT4 = for<'a> async extern fn(); | ||
| ^^^^^^^^-----^^^^^^^^^^^^ | ||
| | | ||
| `async` because of this | ||
| help: remove the `async` qualifier | ||
|
||
error: an `fn` pointer type cannot be `async` | ||
--> $DIR/recover-const-async-fn-ptr.rs:18:12 | ||
| | ||
LL | type FT5 = for<'a> async unsafe extern "C" fn(); | ||
| ^^^^^^^^-----^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | | ||
| `async` because of this | ||
| help: remove the `async` qualifier | ||
|
||
error: an `fn` pointer type cannot be `const` | ||
--> $DIR/recover-const-async-fn-ptr.rs:19:12 | ||
| | ||
LL | type FT6 = for<'a> const async unsafe extern "C" fn(); | ||
| ^^^^^^^^-----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | | ||
| `const` because of this | ||
| help: remove the `const` qualifier | ||
|
||
error: an `fn` pointer type cannot be `async` | ||
--> $DIR/recover-const-async-fn-ptr.rs:19:12 | ||
| | ||
LL | type FT6 = for<'a> const async unsafe extern "C" fn(); | ||
| ^^^^^^^^^^^^^^-----^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | | ||
| `async` because of this | ||
| help: remove the `async` qualifier | ||
|
||
error[E0308]: mismatched types | ||
--> $DIR/recover-const-async-fn-ptr.rs:24:33 | ||
| | ||
LL | let _recovery_witness: () = 0; | ||
| -- ^ expected `()`, found integer | ||
| | | ||
| expected due to this | ||
|
||
error: aborting due to 17 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0308`. |