Followup to PR #16477: a run-pass regression test for Issue #15750.
Add a test for complex divide by zero.
Add export_name to the attribute whitelist and a description in the rust manual
librustc: Implement simple `where` clauses.

These `where` clauses are accepted everywhere generics are currently
accepted and desugar during type collection to the type parameter bounds
we have today.

A new keyword, `where`, has been added. Therefore, this is a breaking
change. Change uses of `where` to other identifiers.

[breaking-change]
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]
auto merge of #16424 : pcwalton/rust/where-clauses, r=nikomatsakis

These `where` clauses are accepted everywhere generics are currently
accepted and desugar during type collection to the type parameter bounds
we have today.

A new keyword, `where`, has been added. Therefore, this is a breaking
change. Change uses of `where` to other identifiers.

[breaking-change]

r? @nikomatsakis (or whoever)
auto merge of #16494 : pnkfelix/rust/fsk-quotstx-followup, r=alexcrichton

Followup to PR #16477: a run-pass regression test for Issue #15750.
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.
auto merge of #16500 : jackheizer/rust/export-name, r=alexcrichton
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
debuginfo: Add a "no_debug" attribute that allows to exclude functions from debuginfo generation.
auto merge of #16497 : michaelwoerister/rust/no_debug_attribute, r=pcwalton

Fixes #15332.
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.