Add a test for complex divide by zero.
librustc: Don't create scratch for the base expr in function record update.
librustc: Fix trans for functional record update when discarding the result.
std::io::util cleanup + fixes

* Fix `LimitReader`'s `Buffer::consume` impl to avoid limit underflow
* Make `MultiWriter` fail fast instead of always running through each
    `Writer`. This may or may not be what we want, but it at least
    doesn't throw any errors encountered in later `Writer`s into oblivion.
* Prevent `IterReader`'s `Reader::read` impl from returning EOF if given
    an empty buffer.

[breaking-change]
Generate slightly better unoptimized code for for-loops

The discriminant for Option values is either 0 or 1, so we can just
truncate the value to an i1, which ends up as a no-op for Options
containing pointers.
Properly canonicalize crate paths specified via --extern

Crates that are resolved normally have their path canonicalized and all
symlinks resolved. This does currently not happen for paths specified
using the --extern option to rustc, which can lead to rustc thinking
that it encountered two different versions of a crate, when it's
actually the same version found through different paths.

To fix this, we must store the canonical path for crates found via
--extern and also use the canonical path when comparing paths.

Fixes #16496
Fix builds with LLVM < 3.6
Derive Clone for std::time::Duration

This is needed to derive Clone for types containing Durations.
auto merge of #16511 : luqmana/rust/sbnt, r=pcwalton

Fixes #15397.
Fixes #7261.
Fixes #6573.
mark &T params without UnsafeCell<U> as readonly

These are already marked as `noalias` due to the immutability guarantee
(see 4c2d4cd3dea344e81e4df24382ac3f23e2f86f40), but more information can
be bubbled up to the caller via `readonly`.
auto merge of #16517 : dotdash/rust/for_trunc, r=pcwalton

The discriminant for Option values is either 0 or 1, so we can just
truncate the value to an i1, which ends up as a no-op for Options
containing pointers.
Fix the order in which struct fields drop

When a struct implements Drop, its fields should still drop in
declaration order (just as they do when the struct does not implement
Drop).

Fixes #16492.
auto merge of #16493 : kballard/rust/fix_drop_field_order, r=pnkfelix

When a struct implements Drop, its fields should still drop in
declaration order (just as they do when the struct does not implement
Drop).

Fixes #16492.
vim: Don't set foldmethod in the syntax file either

We shouldn't be setting any settings in the syntax file. Better to put
them in the ftplugin, where they won't be pulled in by :syn-include and
can be cleaned up when changing the filetype.
auto merge of #16519 : apoelstra/rust/patch-1, r=alexcrichton

This is needed to derive Clone on structures containing durations.
Register new snapshots

Hopefully this will fix #16489!
auto merge of #16513 : sfackler/rust/io-util-cleanup, r=alexcrichton

* Fix `LimitReader`'s `Buffer::consume` impl to avoid limit underflow
* Make `MultiWriter` fail fast instead of always running through each
    `Writer`. This may or may not be what we want, but it at least
    doesn't throw any errors encountered in later `Writer`s into oblivion.
* Prevent `IterReader`'s `Reader::read` impl from returning EOF if given
    an empty buffer.

[breaking-change]
auto merge of #16475 : treeman/rust/complex-divide-by-zero-test, r=alexcrichton

Did not find a test for it.
auto merge of #16520 : dotdash/rust/fix_llvm_before_36, r=thestinger
enable DEP (NX bit) for 32-bit Windows executables

This is already enabled by default for x86_64 executables on Windows,
but it needs to be manually enabled on x86.

Closes #16533