Change Shl<T, T> for Int to Shl<uint, T>
Relicense shootout-threadring.rs

Everyone agreed.

Related to #14248, close #15328
sync: Fail with init semaphore count < 0

Semaphores are not currently designed to handle this case correctly, leading to
very strange behavior. Semaphores as written are intended to count *resources*
and it's not possible to have a negative number of resources.

This alters the behavior and documentation to note that the task will be failed
if the initial count is 0.

Closes #15758
Guide Redux: Pointers
Derive Hash for TrieMap and TrieSet
Implement PartialEq, Eq for TrieMap, TrieSet
Revert "Made 'make install' include libs for additional targets"

This reverts commit 87334fb05ff2a665419241d877c13d6c4770a3f4.

Conflicts:
	mk/install.mk
Remove unnecessary cast from intro
Remove ancient GC cfg flags
TreeMap examples fixes

1. Removed obsolete comment regarding recursive/iteration implementations of tree_find_with/tree_find_mut_with
2. Replaced easy breakable find_with example with simpler one (which only removes redundant allocation during search)
auto merge of #15910 : sfackler/rust/nogc, r=cmr
auto merge of #15749 : vhbit/rust/treemap-doc-fixes, r=alexcrichton

1. Removed obsolete comment regarding recursive/iteration implementations of tree_find_with/tree_find_mut_with
2. Replaced easy breakable find_with example with simpler one (which only removes redundant allocation during search)
Improve usage of lifetime intrinsics in match expressions

The allocas used in match expression currently don't get good lifetime
markers, in fact they only get lifetime start markers, because their
lifetimes don't match to cleanup scopes.

While the bindings themselves are bog standard and just need a matching
pair of start and end markers, they might need them twice, once for a
guard clause and once for the match body.

The __llmatch alloca OTOH needs a single lifetime start marker, but
when there's a guard clause, it needs two end markers, because its
lifetime ends either when the guard doesn't match or after the match
body.

With these intrinsics in place, LLVM can now, for example, optimize
code like this:

````rust
enum E {
  A1(int),
  A2(int),
  A3(int),
  A4(int),
}

pub fn variants(x: E) {
  match x {
    A1(m) => bar(&m),
    A2(m) => bar(&m),
    A3(m) => bar(&m),
    A4(m) => bar(&m),
  }
}
````

To a single call to bar, using only a single stack slot. It still fails
to eliminate some of checks.

````gas
.Ltmp5:
	.cfi_def_cfa_offset 16
	movb	(%rdi), %al
	testb	%al, %al
	je	.LBB3_5
	movzbl	%al, %eax
	cmpl	$1, %eax
	je	.LBB3_5
	cmpl	$2, %eax
.LBB3_5:
	movq	8(%rdi), %rax
	movq	%rax, (%rsp)
	leaq	(%rsp), %rdi
	callq	_ZN3bar20hcb7a0d8be8e17e37daaE@PLT
	popq	%rax
	retq
````
mk: Remove extra whitespace before line continuation backslashes
mk: Add space before line continuation backslash
auto merge of #15902 : nham/rust/hash_triemap, r=alexcrichton

cc #15294
configure: Add --enable-dist-host-only flag

This preserves the current behavior of `make dist` where we only
distribute bins for the host architecture. The bots need this.
mk: Have the various flavors of 'dist' install all targets by default

Closes #15711
auto merge of #15928 : brson/rust/dist, r=alexcrichton,alexcrichton

The first commit reverts a similar fix that only solves the `make install` case. This adds the `--enable-dist-host-only` flag to configure to preserve the old behavior, which the nightly bots rely on. The bots will need to be updated soon after this lands (or they will ~double in size).

Closes https://github.com/rust-lang/rust/issues/15711
Parser: Global single-segment paths should be represented as PatEnum

Fixed #15774.