We introduced the unadjusted ABI to work around wrong
(buggy) ABI expectations by LLVM on Windows [1].
Therefore, it should be solely used on Windows and not
on other platforms, like right now is the case.
[1]: see this comment for details https://github.com/rust-lang/rust/pull/38482#issuecomment-269074031
Bump version, upgrade bootstrap
This commit updates the version number to 1.17.0 as we're not on that version of
the nightly compiler, and at the same time this updates src/stage0.txt to
bootstrap from freshly minted beta compiler and beta Cargo.
This commit updates the version number to 1.17.0 as we're not on that version of
the nightly compiler, and at the same time this updates src/stage0.txt to
bootstrap from freshly minted beta compiler and beta Cargo.
Use `String::with_capacity` in `format!`
Add an `Arguments::estimated_capacity` to estimate the length of formatted text and use it in `std::fmt::format` as the initial capacity of the buffer.
The capacity is calculated based on the literal parts of format string, see the details in the implementation.
Some benches:
```rust
empty: format!("{}", black_box(""))
literal: format!("Literal")
long: format!("Hello Hello Hello Hello, {}!", black_box("world"))
long_rev: format!("{}, hello hello hello hello!", black_box("world"))
long_rev_2: format!("{}{}, hello hello hello hello!", 1, black_box("world"))
short: format!("Hello, {}!", black_box("world"))
short_rev: format!("{}, hello!", black_box("world"))
short_rev_2: format!("{}{}, hello!", 1, black_box("world"))
surround: format!("aaaaa{}ccccc{}eeeee", black_box("bbbbb"), black_box("eeeee"))
two_spaced: format!("{} {}", black_box("bbbbb"), black_box("eeeee"))
worst_case: format!("{} a long piece...", black_box("and even longer argument. not sure why it has to be so long"))
```
```
empty 25 28 3 12.00%
literal 35 29 -6 -17.14%
long 80 46 -34 -42.50%
long_rev 79 45 -34 -43.04%
long_rev_2 111 66 -45 -40.54%
short 73 46 -27 -36.99%
short_rev 74 76 2 2.70%
short_rev_2 107 108 1 0.93%
surround 142 65 -77 -54.23%
two_spaced 111 115 4 3.60%
worst_case 89 101 12 13.48%
```
rustbuild: Build jemalloc and libbacktrace only once (take 2)
This is a rebase of https://github.com/rust-lang/rust/pull/38583 without any additions, but with implemented @alexcrichton's suggestions.
~~This includes `exists(Makefile)` => `cfg(stage0)` suggestion... but it will break cross-compilation, no? Are `libstd/liballoc_jemalloc` cross-compiled for `target != host` built during `stage0`?~~
r? @alexcrichton