-
Notifications
You must be signed in to change notification settings - Fork 13.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
parse: recover on const fn()
/ async fn()
#70421
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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() {} |
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 | ||
|
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 | ||
} |
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 | ||
Comment on lines
+28
to
+35
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do you feel it would make sense to add some explanation of what
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That would have to be |
||
|
||
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`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we move this to
parser/diagnostics.rs
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I generally prefer to keep parsing of various things more self-contained, and
diagnostics.rs
is larger thanty.rs
in any case. :)