rustdoc: Fix broken struct field search links

Takes the same approach as variants, writes a redirect index page back to the
struct with an anchor to the field in question.

Closes #9524
rustdoc: Generate documentation for foreign items

This slurps up everything inside of an 'extern' block into the enclosing module
in order to document them. The documentation must be on the items themselves,
and they'll show up next to everything else on the module index pages.

Closes #5953
rustdoc: Strip implementations of private traits

Closes #5416
rustdoc: Render stability attributes

Closes #8965
remove type_use

This is broken, and results in poor performance due to the undefined
behaviour in the LLVM IR. LLVM's `mergefunc` is a *much* better way of
doing this since it merges based on the equality of the bytecode.

For example, consider `std::repr`. It generates different code per
type, but is not included in the type bounds of generics.

The `mergefunc` pass works for most of our code but currently hits an
assert on libstd. It is receiving attention upstream so it will be
ready soon, but I don't think removing this broken code should wait any
longer. I've opened #9536 about enabling it by default.

Closes #8651
Closes #3547
Closes #2537
Closes #6971
Closes #9222
mark globals as internal when not building a library

Closes #9494
Remove the printf{,ln}! macros

These are deprecated in favor of print{,ln}!
Update the compiler to not use printf/printfln
Update version numbers to 0.9-pre
Remove a little bit of unused C++
auto merge of #9538 : thestinger/rust/type_use, r=pcwalton

This is broken, and results in poor performance due to the undefined
behaviour in the LLVM IR. LLVM's `mergefunc` is a *much* better way of
doing this since it merges based on the equality of the bytecode.

For example, consider `std::repr`. It generates different code per
type, but is not included in the type bounds of generics.

The `mergefunc` pass works for most of our code but currently hits an
assert on libstd. It is receiving attention upstream so it will be
ready soon, but I don't think removing this broken code should wait any
longer. I've opened #9536 about enabling it by default.

Closes #8651
Closes #3547
Closes #2537
Closes #6971
Closes #9222
auto merge of #9540 : alexcrichton/rust/more-rustdoc-improvements, r=brson

Commit messages have the details, mostly just knocking out more low-hanging-fruit type issues.
auto merge of #9548 : thestinger/rust/internal, r=alexcrichton

Closes #9494
auto merge of #9550 : alexcrichton/rust/remove-printf, r=thestinger

The 0.8 release was cut, down with printf!
rustpkg: Implement `rustpkg test`

Towards #7401
Remove the notion of an "unknown format"

As mentioned in #9456, the format! syntax extension would previously consider an
empty format as a 'Unknown' format which could then also get coerced into a
different style of format on another argument.

This is unusual behavior because `{}` is a very common format and if you have
`{0} {0:?}` you wouldn't expect them both to be coereced to the `Poly`
formatter. This commit removes this coercion, but still retains the requirement
that each argument has exactly one format specified for it (an empty format now
counts as well).

Perhaps at a later date we can add support for multiple formats of one argument,
but this puts us in at least a backwards-compatible situation if we decide to do
that.
auto merge of #9535 : alexcrichton/rust/no-format-default, r=thestinger

As mentioned in #9456, the format! syntax extension would previously consider an
empty format as a 'Unknown' format which could then also get coerced into a
different style of format on another argument.

This is unusual behavior because `{}` is a very common format and if you have
`{0} {0:?}` you wouldn't expect them both to be coereced to the `Poly`
formatter. This commit removes this coercion, but still retains the requirement
that each argument has exactly one format specified for it (an empty format now
counts as well).

Perhaps at a later date we can add support for multiple formats of one argument,
but this puts us in at least a backwards-compatible situation if we decide to do
that.
mk: Fully clean out old documentation

This purges doc/{std,extra} entirely during a `make clean` instead of just the
html files in some top level directories. This should help old documentation
from showing up on static.rust-lang.org
auto merge of #9544 : alexcrichton/rust/clean-docs, r=pnkfelix

This purges doc/{std,extra} entirely during a `make clean` instead of just the
html files in some top level directories. This should help old documentation
from showing up on static.rust-lang.org
auto merge of #9549 : catamorphism/rust/rustpkg-test-command, r=catamorphism,metajack

r? @metajack Towards #7401