librustc: Apply null pointer optimization to slices, closures and trait
objects.
librustc: Remove match arm since we don't allow enum to float casts.
librustc: Don't create &[T] slices with NULL as the ptr.
Add tests for null pointer opt.
librustc: Accept type aliases for structures in structure literals and
structure patterns.

Closes #4508.
Update RELEASES.txt

Fix Typos
libcore: Fix Items iterator for zero sized types.
Fix #15453
Improved example in the Guide

Fixes https://github.com/rust-lang/rust/issues/15452
Optimize String::push_byte()

```
test new_push_byte ... bench:      6985 ns/iter (+/- 487) = 17 MB/s
test old_push_byte ... bench:     19335 ns/iter (+/- 1368) = 6 MB/s
```

```rust
extern crate test;
use test::Bencher;

static TEXT: &'static str = "\
    Unicode est un standard informatique qui permet des échanges \
    de textes dans différentes langues, à un niveau mondial.";

#[bench]
fn old_push_byte(bencher: &mut Bencher) {
    bencher.bytes = TEXT.len() as u64;
    bencher.iter(|| {
        let mut new = String::new();
        for b in TEXT.bytes() {
            unsafe { new.as_mut_vec().push_all([b]) }
        }
    })
}

#[bench]
fn new_push_byte(bencher: &mut Bencher) {
    bencher.bytes = TEXT.len() as u64;
    bencher.iter(|| {
        let mut new = String::new();
        for b in TEXT.bytes() {
            unsafe { new.as_mut_vec().push(b) }
        }
    })
}
```
doc: --version no longer displays the host triple
Register snapshot.
auto merge of #15472 : luqmana/rust/snaps, r=alexcrichton
auto merge of #15447 : patrickyevsukov/rust/patch-1, r=alexcrichton

Fix Typos
auto merge of #15454 : jakub-/rust/15453, r=huonw

I forget we now have byte string literals.
auto merge of #15456 : aochagavia/rust/guide, r=alexcrichton

Fixes https://github.com/rust-lang/rust/issues/15452
mk: Fix bootstrapping the nightly builds

The stage0 compiler for a non-CFG_BUILD architecture needs to have the new
`-C extra-filename` argument passed.
auto merge of #15465 : SimonSapin/rust/patch-4, r=alexcrichton

`Vec::push_all` with a length 1 slice seems to have significant overhead compared to `Vec::push`.

```
test new_push_byte ... bench:      6985 ns/iter (+/- 487) = 17 MB/s
test old_push_byte ... bench:     19335 ns/iter (+/- 1368) = 6 MB/s
```

```rust
extern crate test;
use test::Bencher;

static TEXT: &'static str = "\
    Unicode est un standard informatique qui permet des échanges \
    de textes dans différentes langues, à un niveau mondial.";

#[bench]
fn old_push_byte(bencher: &mut Bencher) {
    bencher.bytes = TEXT.len() as u64;
    bencher.iter(|| {
        let mut new = String::new();
        for b in TEXT.bytes() {
            unsafe { new.as_mut_vec().push_all([b]) }
        }
    })
}

#[bench]
fn new_push_byte(bencher: &mut Bencher) {
    bencher.bytes = TEXT.len() as u64;
    bencher.iter(|| {
        let mut new = String::new();
        for b in TEXT.bytes() {
            unsafe { new.as_mut_vec().push(b) }
        }
    })
}
```
auto merge of #15467 : brson/rust/guideversion, r=alexcrichton
Add a test case for #12187, which appears to have been fixed

Closes #12187.