Remove entry_bcx from FunctionContext

We no longer need to refer to the entry block from arbitrary places, so
we can drop it from FunctionContext.
serialize: speed up json pretty printing by batch writing spaces
librustc: Accept type aliases for structures in structure literals and
structure patterns.

Closes #4508.
move lifetime suggestion note to after the error

Closes #15433.
librustc: Make sure to run destructors in the right order when matching on moved value.
auto merge of #15419 : erickt/rust/json, r=pcwalton

This speeds up json serialization by removing most of the allocations.
auto merge of #15425 : jbclements/rust/hygiene-for-3-kinds-of-args, r=cmr

This pull request adds hygiene for 3 kinds of argument bindings:
- arguments to item fns,
- arguments to `ExprFnBlock`s, and
- arguments to `ExprProc`s

It also adds a bunch of unit tests, fixes a few macro uses to be non-capturing, and has a few cleanup items.

local `make check` succeeds.
Update RELEASES.txt

Fix Typos
Refactored VecPerParamSpace to hide exposure of `Vec` representation.

This basically meant changing the interface so that no borrowed `&Vec`
is exposed, by hiding `fn get_vec` and `fn get_mut_vec` and revising
`fn all_vecs`.

Instead, clients should use one of the other methods; `get_slice`,
`pop`, `truncate`, `replace`, `push_all`, or `is_empty_in`, which
should work for any case currently used in rustc.
Revise `VecPerParamSpace` to use a one Vec rather than three.

In my informal measurements, this brings the peak memory usage when
building librustc from 1662M down to 1502M.  Since 1662 - 1502 = 160,
this may not recover the entirety of the observed memory regression
(250M) from PR #14604.  (However, according to my local measurements,
the regression when building librustc was more like 209M, so perhaps
this will still recover the lions share of the lost memory.)
auto merge of #15284 : apoelstra/rust/bitv-methods, r=cmr

The types `Bitv` and `BitvSet` are badly out of date. This PR:
- cleans up the code (primarily, simplifies `Bitv` and implements `BitvSet` in terms of `Bitv`)
- implements several new traits for `Bitv`
- adds new functionality to `Bitv` and `BitvSet`
- replaces internal iterators with external ones
- updates documentation
- minor bug fixes

This is a significantly souped-up version of PR #15139 and is the result of the discussion there.
auto merge of #15414 : zsiciarz/rust/patch-1, r=alexcrichton
auto merge of #15418 : pnkfelix/rust/fsk-revise-VecPerParamSpace, r=pcwalton

In my informal measurements, this brings the peak memory usage when
building librustc from 1662M down to 1502M.  Since 1662 - 1502 = 160,
this may not recover the entirety of the observed memory regression
(250M) from PR #14604.  (However, according to my local measurements,
the regression when building librustc was more like 209M, so perhaps
this will still recover the lions share of the lost memory.)
libcore: Fix Items iterator for zero sized types.
auto merge of #15442 : luqmana/rust/odp, r=pnkfelix

Inadvertently changed the order in which destructors ran in certain cases with #15076.

Fixes #15438.
auto merge of #15427 : aochagavia/rust/parse, r=pcwalton
Fix #15453
auto merge of #15428 : phildawes/rust/master, r=huonw

Fix small bug introduced in e38cb972dcf: PatIdent span was incorrect
because self.last_span was being used before the ident token was
parsed.
Improved example in the Guide

Fixes https://github.com/rust-lang/rust/issues/15452
auto merge of #15429 : kballard/rust/vim_tab_conventions, r=pcwalton