use a more efficient vtable representation

[TyDesc, ... methods] -> [destructor, ... methods]
enable fp-elim when debug info is disabled

This can almost be fully disabled, as it no longer breaks retrieving a
backtrace on OS X as verified by @alexcrichton. However, it still
breaks retrieving the values of parameters. This should be fixable in
the future via a proper location list...

Closes #7477
auto merge of #11879 : thestinger/rust/frame-pointer, r=alexcrichton

This is still used for Rust code (`Options.NoFramePointerElim = true`).
Fixes temporary lifetime computation for static items

closes: #11854
Add test for issue 6157
auto merge of #11776 : FlaPer87/rust/issue-11681-static-lifetime, r=nikomatsakis

Closes #11681
Closes #11854
Remove unused imports.

Signed-off-by: OGINO Masanori <masanori.ogino@gmail.com>
Prefix _ to unused variables.

Signed-off-by: OGINO Masanori <masanori.ogino@gmail.com>
Append ; to #[allow(dead_code)].

Signed-off-by: OGINO Masanori <masanori.ogino@gmail.com>
remove a layer of indirection from most intrinsics
auto merge of #11893 : Armavica/rust/copyable-cloneable, r=huonw

I found awkward to have `MutableCloneableVector` and `CloneableIterator` on the one hand, and `CopyableVector` etc. on the other hand.

The concerned traits are:
* `CopyableVector` --> `CloneableVector`
* `OwnedCopyableVector` --> `OwnedCloneableVector`
* `ImmutableCopyableVector` --> `ImmutableCloneableVector`
* `CopyableTuple` --> `CloneableTuple`
Rename std::borrow to std::reference.

Fixes #11814
Remove double-use of logging.
Remove seldom-used std::reference functions.
Check enum and struct representability properly (issues #3008 and #3779)
Add compile-fail tests for non-representable structs and enums
Remove Times trait

`Times::times` was always a second-class loop because it did not support the `break` and `continue` operations. Its playful appeal was then lost after `do` was disabled for closures. It's time to let this one go.
auto merge of #11672 : bjz/rust/remove-times, r=brson

`Times::times` was always a second-class loop because it did not support the `break` and `continue` operations. Its playful appeal (which I liked) was then lost after `do` was disabled for closures. It's time to let this one go.
Consider types that contain fixed-length-zero vectors of themselves as non-representable until #11924 is resolved
auto merge of #11839 : typelist/rust/issue3008, r=huonw

It was possible to trigger a stack overflow in rustc because the routine used to verify enum representability,
type_structurally_contains, would recurse on inner types until hitting the original type. The overflow condition was when a different structurally recursive type (enum or struct) was contained in the type being checked.

I suspect my solution isn't as efficient as it could be. I pondered adding a cache of previously-seen types to avoid duplicating work (if enums A and B both contain type C, my code goes through C twice), but I didn't want to do anything that may not be necessary.

I'm a new contributor, so please pay particular attention to any unidiomatic code, misuse of terminology, bad naming of tests, or similar horribleness :)

Updated to verify struct representability as well.

Fixes #3008.
Fixes #3779.