rollup merge of #18408 : thestinger/unsafe

This commit is contained in:
Alex Crichton 2014-10-30 08:57:34 -07:00
commit 1e919c93c7

View File

@ -1153,7 +1153,7 @@ exposing an API making it possible for it to occur in safe code.
* Data races
* Dereferencing a null/dangling raw pointer
* Mutating an immutable value/reference
* Mutating an immutable value/reference without `UnsafeCell`
* Reads of [undef](http://llvm.org/docs/LangRef.html#undefined-values)
(uninitialized) memory
* Breaking the [pointer aliasing
@ -1166,11 +1166,14 @@ exposing an API making it possible for it to occur in safe code.
* Using `std::ptr::copy_nonoverlapping_memory` (`memcpy32`/`memcpy64`
instrinsics) on overlapping buffers
* Invalid values in primitive types, even in private fields/locals:
* Dangling/null pointers in non-raw pointers, or slices
* Dangling/null references or boxes
* A value other than `false` (0) or `true` (1) in a `bool`
* A discriminant in an `enum` not included in the type definition
* A value in a `char` which is a surrogate or above `char::MAX`
* non-UTF-8 byte sequences in a `str`
* Unwinding into Rust from foreign code or unwinding from Rust into foreign
code. Rust's failure system is not compatible with exception handling in
other languages. Unwinding must be caught and handled at FFI boundaries.
##### Behaviour not considered unsafe