Skip to content

Commit 66754d6

Browse files
committed
update aliasing rules section of the reference
1 parent 4ea7c5d commit 66754d6

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

src/behavior-considered-undefined.md

+9-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,15 @@ 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]. `&mut T` and `&T` follow LLVM’s scoped
30-
[noalias] model, except if the `&T` contains an [`UnsafeCell<U>`].
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
37+
pointer indirections.
3138
* Mutating immutable data. All data inside a [`const`] item is immutable. Moreover, all
3239
data reached through a shared reference or data owned by an immutable binding
3340
is immutable, unless that data is contained within an [`UnsafeCell<U>`].

0 commit comments

Comments
 (0)