about summary refs log tree commit diff
path: root/src/docs/default_union_representation.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/docs/default_union_representation.txt')
-rw-r--r--src/docs/default_union_representation.txt36
1 files changed, 0 insertions, 36 deletions
diff --git a/src/docs/default_union_representation.txt b/src/docs/default_union_representation.txt
deleted file mode 100644
index f79ff9760e5..00000000000
--- a/src/docs/default_union_representation.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-### What it does
-Displays a warning when a union is declared with the default representation (without a `#[repr(C)]` attribute).
-
-### Why is this bad?
-Unions in Rust have unspecified layout by default, despite many people thinking that they
-lay out each field at the start of the union (like C does). That is, there are no guarantees
-about the offset of the fields for unions with multiple non-ZST fields without an explicitly
-specified layout. These cases may lead to undefined behavior in unsafe blocks.
-
-### Example
-```
-union Foo {
-    a: i32,
-    b: u32,
-}
-
-fn main() {
-    let _x: u32 = unsafe {
-        Foo { a: 0_i32 }.b // Undefined behavior: `b` is allowed to be padding
-    };
-}
-```
-Use instead:
-```
-#[repr(C)]
-union Foo {
-    a: i32,
-    b: u32,
-}
-
-fn main() {
-    let _x: u32 = unsafe {
-        Foo { a: 0_i32 }.b // Now defined behavior, this is just an i32 -> u32 transmute
-    };
-}
-```
\ No newline at end of file