diff options
| author | George Bateman <george.bateman16@gmail.com> | 2023-08-15 20:10:45 +0100 |
|---|---|---|
| committer | George Bateman <george.bateman16@gmail.com> | 2023-10-31 23:25:54 +0000 |
| commit | e936416a8d3cfb501504f00d7250d5b595fed244 (patch) | |
| tree | c0dd8196372db8a77ae1a90d38d87b630658e90e /compiler/rustc_error_codes | |
| parent | 9d83ac217957eece2189eccf4a7232caec7232ee (diff) | |
| download | rust-e936416a8d3cfb501504f00d7250d5b595fed244.tar.gz rust-e936416a8d3cfb501504f00d7250d5b595fed244.zip | |
Support enum variants in offset_of!
Diffstat (limited to 'compiler/rustc_error_codes')
| -rw-r--r-- | compiler/rustc_error_codes/src/error_codes.rs | 1 | ||||
| -rw-r--r-- | compiler/rustc_error_codes/src/error_codes/E0795.md | 28 |
2 files changed, 29 insertions, 0 deletions
diff --git a/compiler/rustc_error_codes/src/error_codes.rs b/compiler/rustc_error_codes/src/error_codes.rs index 89c44c6ec8a..6680e8875c3 100644 --- a/compiler/rustc_error_codes/src/error_codes.rs +++ b/compiler/rustc_error_codes/src/error_codes.rs @@ -514,6 +514,7 @@ E0791: include_str!("./error_codes/E0791.md"), E0792: include_str!("./error_codes/E0792.md"), E0793: include_str!("./error_codes/E0793.md"), E0794: include_str!("./error_codes/E0794.md"), +E0795: include_str!("./error_codes/E0795.md"), } // Undocumented removed error codes. Note that many removed error codes are kept in the list above diff --git a/compiler/rustc_error_codes/src/error_codes/E0795.md b/compiler/rustc_error_codes/src/error_codes/E0795.md new file mode 100644 index 00000000000..8b4b2dc87fd --- /dev/null +++ b/compiler/rustc_error_codes/src/error_codes/E0795.md @@ -0,0 +1,28 @@ +Invalid argument for the `offset_of!` macro. + +Erroneous code example: + +```compile_fail,E0795 +#![feature(offset_of)] + +let x = std::mem::offset_of!(Option<u8>, Some); +``` + +The `offset_of!` macro gives the offset of a field within a type. It can +navigate through enum variants, but the final component of its second argument +must be a field and not a variant. + +The offset of the contained `u8` in the `Option<u8>` can be found by specifying +the field name `0`: + +``` +#![feature(offset_of)] + +let x: usize = std::mem::offset_of!(Option<u8>, Some.0); +``` + +The discriminant of an enumeration may be read with `core::mem::discriminant`, +but this is not always a value physically present within the enum. + +Further information about enum layout may be found at +https://rust-lang.github.io/unsafe-code-guidelines/layout/enums.html. |
