librustc: Don't reuse same alloca for match on struct/tuple field which we reassign to in match body.
rustc: check supertraits for object safety

Closes #18959

Technically, this causes code that once compiled to no longer compile, but
that code probably never ran.

[breaking-change]
auto merge of #19539 : cmr/rust/18959, r=nikomatsakis

Closes #18959

Technically, this causes code that once compiled to no longer compile, but
that code probably never ran.

[breaking-change]

------------

Not quite sure the error message is good enough, I feel like it ought to tell you "because it inherits from non-object-safe trait Foo", so I've opened up a follow-up issue #19538
auto merge of #19548 : luqmana/rust/mfb, r=nikomatsakis

Fixes #19367.
libs: merge librustrt into libstd

This commit merges the `rustrt` crate into `std`, undoing part of the
facade. This merger continues the paring down of the runtime system.

Code relying on the public API of `rustrt` will break; some of this API
is now available through `std::rt`, but is likely to change and/or be
removed very soon.

[breaking-change]
Refactor std::os to use sys::os
Allow args to work without rt initialization
Make at_exit initialize lazily and use atexit
Remove rt::bookkeeping

This commit removes the runtime bookkeeping previously used to ensure
that all Rust tasks were joined before the runtime was shut down.

This functionality will be replaced by an RAII style `Thread` API, that
will also offer a detached mode.

Since this changes the semantics of shutdown, it is a:

[breaking-change]
Remove rt::{local, local_data, thread_local_storage}
Remove rt::{mutex, exclusive}
Introduce std::thread

Also removes:

* `std::task`
* `std::rt::task`
* `std::rt::thread`

This commit completely changes the thread model (threads are detached by
default) and API (including park/unpark for blocking). It is a:

[breaking-change]
Add blocking support module for channels
Revise rt::unwind
Fallout from new thread API