* DSTs, tuples, and tagged unions are not a concept in C and as such are never
FFI safe.
-* **The drop flag will still be added**
+* **The [drop flag][] will still be added**
-* This is equivalent to `repr(u32)` for enums (see below)
+* This is equivalent to one of `repr(u\*)` (see the next section) for enums. The
+ chosen size is the default enum size for the target platform's C ABI. Note that
+ enum representation in C is undefined, and this may be incorrect when the C
+ code is compiled with certain flags.
+
+
+
+# repr(u8), repr(u16), repr(u32), repr(u64)
+
+These specify the size to make a C-like enum. If the discriminant overflows the
+integer it has to fit in, it will be an error. You can manually ask Rust to
+allow this by setting the overflowing element to explicitly be 0. However Rust
+will not allow you to create an enum where two variants have the same discriminant.
+
+On non-C-like enums, this will inhibit certain optimizations like the null-pointer
+optimization.
+
+These reprs have no affect on a struct.
negative side-effects.
In particular, most architectures *strongly* prefer values to be aligned. This
-may mean the unaligned loads are penalized (x86), or even fault (ARM). In
-particular, the compiler may have trouble with references to unaligned fields.
+may mean the unaligned loads are penalized (x86), or even fault (some ARM chips).
+For simple cases like directly loading or storing a packed field, the compiler
+might be able to paper over alignment issues with shifts and masks. However if
+you take a reference to a packed field, it's unlikely that the compiler will be
+able to emit code to avoid an unaligned load.
`repr(packed)` is not to be used lightly. Unless you have extreme requirements,
this should not be used.
This repr is a modifier on `repr(C)` and `repr(rust)`.
-
-
-
-# repr(u8), repr(u16), repr(u32), repr(u64)
-
-These specify the size to make a C-like enum. If the discriminant overflows the
-integer it has to fit in, it will be an error. You can manually ask Rust to
-allow this by setting the overflowing element to explicitly be 0. However Rust
-will not allow you to create an enum where two variants.
-
-These reprs have no affect on a struct or non-C-like enum.
\ No newline at end of file
+[drop flag]: drop-flags.html