Support Option and similar enums as type of static variable with linkage attribute.
Compiler MCP: https://github.com/rust-lang/compiler-team/issues/565
This commit is contained in:
parent
5873ebeef3
commit
f44a0153bc
7 changed files with 67 additions and 5 deletions
|
@ -494,6 +494,7 @@ E0786: include_str!("./error_codes/E0786.md"),
|
|||
E0787: include_str!("./error_codes/E0787.md"),
|
||||
E0788: include_str!("./error_codes/E0788.md"),
|
||||
E0790: include_str!("./error_codes/E0790.md"),
|
||||
E0791: include_str!("./error_codes/E0791.md"),
|
||||
;
|
||||
// E0006, // merged with E0005
|
||||
// E0008, // cannot bind by-move into a pattern guard
|
||||
|
|
41
compiler/rustc_error_codes/src/error_codes/E0791.md
Normal file
41
compiler/rustc_error_codes/src/error_codes/E0791.md
Normal file
|
@ -0,0 +1,41 @@
|
|||
Static variables with the `#[linkage]` attribute within external blocks
|
||||
must have one of the following types, which are equivalent to a nullable
|
||||
pointer in C:
|
||||
|
||||
* `*mut T` or `*const T`, where `T` may be any type.
|
||||
|
||||
* An enumerator type with no `#[repr]` attribute and with two variants, where
|
||||
one of the variants has no fields, and the other has a single field of one of
|
||||
the following non-nullable types:
|
||||
* Reference type
|
||||
* Function pointer type
|
||||
|
||||
The variants can appear in either order.
|
||||
|
||||
For example, the following declaration is invalid:
|
||||
|
||||
```compile_fail,E0791
|
||||
#![feature(linkage)]
|
||||
|
||||
extern "C" {
|
||||
#[linkage = "extern_weak"]
|
||||
static foo: i8;
|
||||
}
|
||||
```
|
||||
|
||||
The following declarations are valid:
|
||||
|
||||
```
|
||||
#![feature(linkage)]
|
||||
|
||||
extern "C" {
|
||||
#[linkage = "extern_weak"]
|
||||
static foo: Option<unsafe extern "C" fn()>;
|
||||
|
||||
#[linkage = "extern_weak"]
|
||||
static bar: Option<&'static i8>;
|
||||
|
||||
#[linkage = "extern_weak"]
|
||||
static baz: *mut i8;
|
||||
}
|
||||
```
|
Loading…
Add table
Add a link
Reference in a new issue