@@ -26,14 +26,20 @@ code.
2626* Evaluating a [ dereference expression] (` *expr ` ) on a raw pointer that is
2727 [ dangling] or unaligned, even in [ place expression context]
2828 (e.g. ` addr_of!(&*expr) ` ).
29- * Breaking the [ pointer aliasing rules] . ` Box<T> ` , ` &mut T ` and ` &T ` follow LLVM’s
30- scoped [ noalias] model, except if the ` &T ` contains an [ ` UnsafeCell<U> ` ] .
31- References must not be dangling while they are live. (The exact liveness
32- duration is not specified, but it is certainly upper-bounded by the syntactic
33- lifetime assigned by the borrow checker. When a reference is passed to a
34- function, it is live at least as long as that function call, again except if
35- the ` &T ` contains an [ ` UnsafeCell<U> ` ] .) All this also applies when values of
36- these types are passed in a (nested) field of a compound type, but not behind
29+ * Breaking the [ pointer aliasing rules] . ` Box<T> ` , ` &mut T ` and ` &T ` follow
30+ LLVM’s scoped [ noalias] model, except if the ` &T ` contains an
31+ [ ` UnsafeCell<U> ` ] . References and boxes must not be dangling while they are
32+ live. The exact liveness duration is not specified, but some bounds exist:
33+ * For references, the liveness duration is upper-bounded by the syntactic
34+ lifetime assigned by the borrow checker.
35+ * Each time a reference or box is passed to or returned from a function, it is
36+ considered live.
37+ * When a reference (but not a ` Box ` !) is passed to a function, it is live at
38+ least as long as that function call, again except if the ` &T ` contains an
39+ [ ` UnsafeCell<U> ` ] .
40+
41+ All this also applies when values of these
42+ types are passed in a (nested) field of a compound type, but not behind
3743 pointer indirections.
3844* Mutating immutable data. All data inside a [ ` const ` ] item is immutable. Moreover, all
3945 data reached through a shared reference or data owned by an immutable binding
0 commit comments