native: Try hard to not malloc on a forked child

This appears to be causing the BSD bots to lock up when looking at the core
dumps I've managed to get. Dropping the `FileDesc` structure triggers the `Arc`
it's contained in to get cleaned up, invoking free(). This instead just closes
the file descriptor (the arc itself is never cleaned up).

I'm still not entirely sure why this is a problem because the pthreads runtime
should register hooks for fork() to prevent this sort of deadlock, but perhaps
that's only done on linux?
auto merge of #13393 : alexcrichton/rust/hopefully-fix-bsd, r=sfackler

This appears to be causing the BSD bots to lock up when looking at the core
dumps I've managed to get. Dropping the `FileDesc` structure triggers the `Arc`
it's contained in to get cleaned up, invoking free(). This instead just closes
the file descriptor (the arc itself is never cleaned up).

I'm still not entirely sure why this is a problem because the pthreads runtime
should register hooks for fork() to prevent this sort of deadlock, but perhaps
that's only done on linux?
sync: remove unsafe and add Send+Share to Deref (enabled by autoderef vtables)
Made libflate functions return Options instead of outright failing
doc: Document flavorful variations of paths

Closes #4293
Register new snapshots
std: Add more docs for ptr mod
rustc: Use CStore, not a separate crate cache

This separate crate cache is one factor which is causing libstd to be loaded
twice during normal compilation. The crates loaded for syntax extensions have a
separate cache than the crates loaded for linking, so all crates are loaded once
per #[phase] they're tagged with.

This removes the cache and instead uses the CStore structure itself as the cache
for loaded crates. This should allow crates loaded during the syntax phase to be
shared with the crates loaded during the link phase.
rustc: Never register syntax crates in CStore

When linking, all crates in the local CStore are used to link the final product.
With #[phase(syntax)], crates want to be omitted from this linkage phase, and
this was achieved by dumping the entire CStore after loading crates. This causes
crates like the standard library to get loaded twice. This loading process is a
fairly expensive operation when dealing with decompressing metadata.

This commit alters the loading process to never register syntax crates in
CStore. Instead, only phase(link) crates ever make their way into the map of
crates. The CrateLoader trait was altered to return everything in one method
instead of having separate methods for finding information.
rustc: Don't read both rlib and dylib metadata

This is an optimization which is quite impactful for compiling small crates.
Reading libstd's metadata takes about 50ms, and a hello world before this change
took about 100ms (this change halves that time).

Recent changes made it such that this optimization wasn't performed, but I think
it's a better idea do to this for now. See #10786 for tracking this issue.
fix ~ZeroSizeType rvalues

Closes #13360
Improve searching for XXX in tidy script (#3303)

Few places where previous version of tidy script cannot find XXX:
* inside one-line comment preceding by a few spaces;
* inside multiline comments (now it finds it if multiline comment starts
on the same line with XXX).

Change occurences of XXX found by new tidy script.
std: User a smaller stdin buffer on windows

Apparently windows doesn't like reading from stdin with a large buffer size, and
it also apparently is ok with a smaller buffer size. This changes the reader
returned by stdin() to return an 8k buffered reader for stdin rather than a 64k
buffered reader.

Apparently libuv has run into this before, taking a peek at their code, with a
specific comment in their console code saying that "ReadConsole can't handle big
buffers", which I presume is related to invoking ReadFile as if it were a file
descriptor.

Closes #13304
Fix spelling errors in comments.
Made 'make install' include libs for additional targets
std: make vec!() macro handle a trailing comma

Fixes #12910.
Add test for #11881

Closes #11881.

This code has been copied from the original issue and updated for
modern Rust APIs.
Test fixes from rollup

Closes #13394 (sync: remove unsafe and add Send+Share to Deref (enabled by autoderef vtables))
Closes #13389 (Made libflate functions return Options instead of outright failing)
Closes #13388 (doc: Document flavorful variations of paths)
Closes #13387 (Register new snapshots)
Closes #13386 (std: Add more docs for ptr mod)
Closes #13384 (Tweak crate loading to load less metadata)
Closes #13382 (fix ~ZeroSizeType rvalues)
Closes #13378 (Update tidy script, replace XXX with FIXME)
Closes #13377 (std: User a smaller stdin buffer on windows)
Closes #13369 (Fix spelling errors in comments.)
Closes #13314 (Made 'make install' include libs for additional targets)
Closes #13278 (std: make vec!() macro handle a trailing comma)
Closes #13276 (Add test for #11881)
auto merge of #13397 : alexcrichton/rust/rollup, r=alexcrichton
Make constant of enum type properly aligned

This patch fixes issue #13186.

Previously, function `middle::trans::trans_const` result for expression:

```
Aaa
```

from enum:

```
enum Eee {
    Aaa,
    Bbb(u64)
}
```

was unaligned:

```
{ i8 0, [7 x i8] undef }
```

With patch applied, aligner is added to the result:

```
{ i8 0, [7 x i8] undef, [0 x i64] zeroinitializer }
```

Currently aligner is an empty array of appropriate integer size.
Mapping from alignment to arbitrary aligner is computed at compilation
start and stored in struct CrateContext.

Note, that unlike unions in C, enum members in Rust may have different
offsets, because they have different alignments. This should probably be
fixed one day (by inserting aligner before value and padding, not after),
but it requires much larger patch.