@@ -26,14 +26,20 @@ code.
26
26
* Evaluating a [ dereference expression] (` *expr ` ) on a raw pointer that is
27
27
[ dangling] or unaligned, even in [ place expression context]
28
28
(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
37
43
pointer indirections.
38
44
* Mutating immutable data. All data inside a [ ` const ` ] item is immutable. Moreover, all
39
45
data reached through a shared reference or data owned by an immutable binding
0 commit comments