Refactor `Vec::map_in_place` to move code out of `PartialVec`

Additionally, support zero-sized types.
rustc: Turn off split stacks on Windows
Disable runtime split stack support on Windows
Add test for #13259. Closes #13259 and #14742
Remove windows TCB hack from rustdoc
Replaced some TODO by FIXME

closes #17478
Ignore win-tcb test on non-windows
mk: Start producing binary tarballs on windows

We may use these for creating combined rust/cargo installers
install: Fix the install.sh script to work with spaces

Makes it work on windows
Include ChaCha pseudorandom generator
auto merge of #17563 : brson/rust/wintcbfix, r=thestinger

This is the bare minimum to stop using split stacks on Windows, fixing https://github.com/rust-lang/rust/issues/13259 and #14742, by turning on stack probes for all functions and disabling compiler and runtime support for split stacks on Windows.

It does not restore the out-of-stack error message, which requires more runtime work.

This includes a test that the Windows TCB is no longer being clobbered, but the out-of-stack test itself is pretty weak, only testing that the program exits abnormally, not that it isn't writing to bogus memory, so I haven't truly verified that this is providing the safety we claim.

A more complete solution is in https://github.com/rust-lang/rust/pull/16388, which has some unresolved issues yet.

cc @Zoxc @klutzy @vadimcn
Removed some unnecessary RefCells from resolve
auto merge of #17640 : brson/rust/wininst, r=alexcrichton

This makes the windows `make dist` target start producing binary tarballs, and tweaks install.sh so they work, in preparation for working on a combined Rust+Cargo installer.
librustc: Stop looking in metadata in type contents.

4x improvement in pre-trans compile time for rustc.
Fixes ICE when using reexported unit-like structs

Fixes that unit-like structs cannot be used if they are reexported and
used in another crate. The compiler fails with an ICE, because unit-like
structs are exported as DefFn and the expression `UnitStruct` is
interpreted as function pointer instead of a call to the constructor.

To resolve this ambiguity tuple-like struct constructors are now exported
as CtorFn. When `rustc::metadata::decoder` finds a CtorFn it sets a new
flag `is_ctor` in DefFn to true.

Relevant changes are in `rustc::metadata::{encoder, decoder}` and in
`rustc::middle::ty`.

Closes #12660 and #16973.
librustc: Forbid `..` in range patterns.

This breaks code that looks like:

    match foo {
        1..3 => { ... }
    }

Instead, write:

    match foo {
        1...3 => { ... }
    }

Closes #17295.

[breaking-change]
Ignore yet another windows debuginfo test
auto merge of #17647 : pcwalton/rust/stop-looking-in-metadata-in-tc, r=cmr

I don't know exactly what made this regress so badly…maybe it was all the lifetimes that @eddyb landed. According to `git blame` this is all somewhat old code. Regardless this is an enormous improvement in compile times.

r? @brson
Teach libsyntax about `if let`
Desugar 'if let' into the appropriate 'match'