Make shift_ref and mut_shift_ref return Option instead of failing
Make pop_ref and mut_pop_ref return Option instead of failing on empty vectors
Make mut_last return Option instead of failing on empty vector (and add a test for mut_last)
Handle attributes on cross-crate tuple-structs correctly

Fixes #11741
Make next_power_of_two generic for unsigned integers

Also rename `next_power_of_two_opt` to `checked_next_power_of_two`.
Remove some unused imports
Remove free-standing div functions in std::uint
Move int and uint overflow tests into macros
auto merge of #11930 : bjz/rust/next_power_of_two, r=huonw
auto merge of #11932 : dmanescu/rust/11741-stability-cross-crate, r=alexcrichton

Fixes #11741
Added tests and removed xfail-fast from run-pass/simd-experimental which is now fixed (see #11738).
Optimize u64_to_{le,be}_bytes

LLVM fails to properly optimize the shifts used to convert the source
value to the right endianess. The resulting assembly copies the value
to the stack one byte at a time even when there's no conversion required
(e.g. u64_to_le_bytes on a little endian machine).

Instead of doing the conversion ourselves using shifts, we can use the
existing intrinsics to perform the endianess conversion and then
transmute the value to get a fixed vector of its bytes.

Before:

test be_i8  ... bench:     21442 ns/iter (+/- 70)
test be_i16 ... bench:     21447 ns/iter (+/- 45)
test be_i32 ... bench:     23832 ns/iter (+/- 63)
test be_i64 ... bench:     26887 ns/iter (+/- 267)

test le_i8  ... bench:     21442 ns/iter (+/- 56)
test le_i16 ... bench:     21448 ns/iter (+/- 36)
test le_i32 ... bench:     23825 ns/iter (+/- 153)
test le_i64 ... bench:     26271 ns/iter (+/- 138)

After:

test be_i8  ... bench:     21438 ns/iter (+/- 10)
test be_i16 ... bench:     21441 ns/iter (+/- 15)
test be_i32 ... bench:     19057 ns/iter (+/- 6)
test be_i64 ... bench:     21439 ns/iter (+/- 34)

test le_i8  ... bench:     21438 ns/iter (+/- 19)
test le_i16 ... bench:     21439 ns/iter (+/- 8)
test le_i32 ... bench:     21439 ns/iter (+/- 19)
test le_i64 ... bench:     21438 ns/iter (+/- 22)
libsyntax: Introduce an `InternedString` type to reduce `@str` in the
compiler and use it for attributes
libsyntax: De-`@str` literal strings in the AST
libsyntax: De-`@str` `to_source`
librustc: Fix merge fallout.
libsyntax: Remove the unnecessary `src` field from the lexer
librustc: Stop using `@str` for source.
libsyntax: De-`@str` pathnames
libsyntax: Make float literals not use `@str`
libsyntax: Remove all `@str` from the AST