Add a test for complex divide by zero.
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]
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.
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`.
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
auto merge of #16525 : thestinger/rust/readonly, r=pcwalton

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 #16527 : kballard/rust/vim_fold, r=chris

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 #16534 : thestinger/rust/dep, r=huonw

This is already enabled by default for x86_64 executables on Windows,
but it needs to be manually enabled on x86.

Closes #16533
auto merge of #16505 : dotdash/rust/extern_realpath, r=alexcrichton

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.

Fixes #16496
auto merge of #16531 : alexcrichton/rust/snapshots, r=luqmana

Hopefully this will fix #16489!
Introduce lifetime bounds on iterators and other types as needed.
Rewrite Vec iterators to use a transmute and named lifetime so as to meet lifetime requirements