improve clone_from_slice performance
add intmax
Parser: Fix spans of explicit self arg idents
Use strlen in CString::len
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.
rustdoc: hide private traits in strip-private pass

Fix #16563
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.