Stability lint checker now handles nested macros.

Closes #17185.
Fix crazy-pants match in Option docs
Use strlen in CString::len
auto merge of #17508 : vberger/rust/stability_lint_for_nested_macros, r=pnkfelix

Finishes the job of #17286.

Now the stability lint will successfully detect patterns such as:
```
first_macro!(second_macro!(deprecated_function()));
```
```
macro_rules! foo (
    ($e: expr) => (bar!($e))
)
foo!(deprected_function());
```
and
```
println!("{}", deprecated_function());
```
even with more levels of nesting, such as
```
println!("{}", foo!(bar!(deprecated_function())));
```
auto merge of #18201 : Gankro/rust/option-what, r=alexcrichton

:whale:
Prune unused parameters.
Implement "method matching". Similar to trait matching, but with the twist that we
have to take the transformed self type into account, and allow for coercion between
the receiver and the actual type declared on the impl.
Permit DST types to unify like other types.

Also:
1. stop eagerly coercing from `[T, ..n]` to `[T]` only do so if requested.
2. permit error to be interact more freely.

Fixes #17178.
Generalize the replace-late-bound-regions function to operate
over anything that is foldable, not just fn signatures.
Change method lookup infrastructure to use the trait methods. Instead
of tracking individual candidates per impl, we just track one
candidate for the extension trait itself, and let the trait resolution
handle walking the individual impls and so forth. Also change the
interface to report back a richer notion of error.
Correct case where the old version of method lookup was incorrectly matching,
as far as I can tell.
The new method lookup mechanism typechecks calls against the method type declared in the trait, not in the impl. In some cases that results in tighter rules, and in some cases looser. Correct for that.
Test where the old infrastructure failed to detect the (applicable) impl of `FnMut` for
some reason.
Various minor cases where errors are reported in slightly different ways.
Tests for method resolution in the face of various ambiguities or non-ambiguities. These
are mostly new tests though I also revamped (and renamed) some of the existing tests.
Coherence tests that seemed to be missing.
Address nits by @pcwalton
auto merge of #18203 : mahkoh/rust/cstring, r=thestinger

This is about 20x faster on my machine.
Patch up broken error messages
enable parallel codegen by default

Enable parallel codegen (2 units) by default when --opt-level is 0 or 1.  This
gives a minor speedup on large crates (~10%), with only a tiny slowdown (~2%)
for small ones (which usually build in under a second regardless).  The current
default (no parallelization) is used when the user requests optimization
(--opt-level 2 or 3), and when the user has enabled LTO (which is incompatible
with parallel codegen).

This commit also changes the rust build system to use parallel codegen
when appropriate.  This means codegen-units=4 for stage0 always, and
also for stage1 and stage2 when configured with --disable-optimize.
(Other settings use codegen-units=1 for stage1 and stage2, to get
maximum performance for release binaries.)  The build system also sets
codegen-units=1 for compiletest tests (compiletest does its own
parallelization) and uses the same setting as stage2 for crate tests.