]> git.lizzy.rs Git - rust.git/commitdiff
Make note of noalias in unsafe reference section
authorSteve Klabnik <steve@steveklabnik.com>
Sat, 28 Mar 2015 19:42:56 +0000 (15:42 -0400)
committerSteve Klabnik <steve@steveklabnik.com>
Mon, 30 Mar 2015 16:36:10 +0000 (12:36 -0400)
Fixes #19733

src/doc/reference.md

index 32088b2ab67bf9dbed624557bd0e12ad30eb23e6..81dcfa85f086015186a01cccf7cb43fa48fc7003 100644 (file)
@@ -1231,12 +1231,15 @@ the guarantee that these issues are never caused by safe code.
 
 * Data races
 * Dereferencing a null/dangling raw pointer
-* Mutating an immutable value/reference without `UnsafeCell`
 * Reads of [undef](http://llvm.org/docs/LangRef.html#undefined-values)
   (uninitialized) memory
 * Breaking the [pointer aliasing
   rules](http://llvm.org/docs/LangRef.html#pointer-aliasing-rules)
   with raw pointers (a subset of the rules used by C)
+* `&mut` and `&` follow LLVM’s scoped [noalias] model, except if the `&T`
+  contains an `UnsafeCell<U>`. Unsafe code must not violate these aliasing
+  guarantees.
+* Mutating an immutable value/reference without `UnsafeCell<U>`
 * Invoking undefined behavior via compiler intrinsics:
   * Indexing outside of the bounds of an object with `std::ptr::offset`
     (`offset` intrinsic), with
@@ -1253,6 +1256,8 @@ the guarantee that these issues are never caused by safe code.
   code. Rust's failure system is not compatible with exception handling in
   other languages. Unwinding must be caught and handled at FFI boundaries.
 
+[noalias]: http://llvm.org/docs/LangRef.html#noalias
+
 ##### Behaviour not considered unsafe
 
 This is a list of behaviour not considered *unsafe* in Rust terms, but that may