Changed `extern crate foo as bar;` error message

Closes #17709
Remove `virtual` structs from the language
Remove `virtual` struct tests
Remove `virtual` structs from the reference
fix shootout-mandelbrot to make it pass the shootout test
auto merge of #17952 : jakub-/rust/remove-virtual-structs, r=eddyb

Closes #17861.
Make the diagnostic for static variables in patterns better

Fixes #17933.
optimize position independent code in executables

Position independent code has fewer requirements in executables, so pass
the appropriate flag to LLVM in order to allow more optimization. At the
moment this means faster thread-local storage.
Never expand specialized columns that only contain wild patterns in them

Doing so would incur deeply nested expansion of the tree with no useful
side effects. This is problematic for "wide" data types such as structs
with dozens of fields but where only a few are actually being matched or bound.
Most notably, matching a fixed slice would use a number of stack frames that
grows with the number of elements in the slice.

Fixes #17877.
Continue cfg syntax transition

All deprecation warnings have been converted to errors. This includes
the warning for multiple cfgs on one item. We'll leave that as an error
for some period of time to ensure that all uses are updated before the
behavior changes from "or" to "and".
libtime: `strftime` and `strptime` return type changed to `Result<String, ParseError>`.

`strftime` currently returns a `String`. This does not indicate that
this function may return an error due to to a malformed format string.
This change introduces a `ParseError` enum which indicates the type of
error that occurred. The return type of `strptime` was also changed to
use this new enum instead of returning `Result<String, String>`. Now,
all instances where `strftime` was used need to have their return value
checked to see if it were valid or not.

[breaking-change]
auto merge of #17944 : jakub-/rust/issue-17877, r=alexcrichton

Fixes #17877.
Update a test error message

 #17709
auto merge of #17467 : hatahet/rust/mybranch, r=alexcrichton



[breaking-change]
auto merge of #17757 : gamazeps/rust/issue17709, r=alexcrichton

I did not put the crate name in the error note, if that's necessary I'll look into it.

Closes #17709
auto merge of #17948 : jakub-/rust/issue-17933, r=alexcrichton

Fixes #17933.
auto merge of #17957 : TeXitoi/rust/fix-mandelbrot, r=alexcrichton
auto merge of #17975 : thestinger/rust/fPIE, r=eddyb

Position independent code has fewer requirements in executables, so pass
the appropriate flag to LLVM in order to allow more optimization. At the
moment this means faster thread-local storage.
auto merge of #17963 : sfackler/rust/cfg-error, r=alexcrichton

All deprecation warnings have been converted to errors. This includes
the warning for multiple cfgs on one item. We'll leave that as an error
for some period of time to ensure that all uses are updated before the
behavior changes from "or" to "and".
Guide: develop the exposition of arrays, vectors, and slices.

The array is the fundamental concept; vectors are growable arrays, and
slices are views into either.  Show common array ops up front: length
and iteration.  Mention arrays are immutable by default.  Highlight
definite initialization and bounds-checking as safety features.  Show
that you only need a type suffix on one element of initializers.
Explain that vectors are a value-add library type over arrays, not a
fundamental type; show they have the same "interface." Motivate slices
as efficient views into arrays; explain you can slice vectors, Strings,
&str because they're backed by arrays.