std: IPv6 addresses are represented as eight groups of four HEXADECIMAL digits
Represent C-like enums with a plain LLVM integer, not a struct.

This is needed so that the FFI works as expected on platforms that don't
flatten aggregates the way the AMD64 ABI does, especially for `#[repr(C)]`.

This moves more of `type_of` into `trans::adt`, because the type might
or might not be an LLVM struct.
Add an implementation of Encodable and Decodable for Rc. This will be needed to use Rc in place of @ in libsyntax.
Implement IterBytes for Rc<T>.
auto merge of #10658 : LeoTestard/rust/serialize-rc, r=cmr

Implement various traits (IterBytes and extra's Encodable and Decodable) for Rc<T> when T alreay implements the trait.
auto merge of #10650 : andreasots/rust/ipv6-is-in-hex, r=alexcrichton

Without this the assert in <tt>rust_malloc_ip6_addr</tt> is triggered as it expects a correctly formatted IPv6 address.
Fix the usual check-fast scoping mistake.
rustc: Add lint for misplaced crate attributes
rustc: Add lint for obsolete attributes

This also moves `#[auto_{en,de}code]` checker from syntax to lint.
std: Remove unused attributes

This also enables two tests properly.
Add tests for attribute lint
auto merge of #10652 : jld/rust/enum-unstruct, r=thestinger

This is needed so that the FFI works as expected on platforms that don't
flatten aggregates the way the AMD64 ABI does, especially for `#[repr(C)]`.

This moves more of `type_of` into `trans::adt`, because the type might
or might not be an LLVM struct.

Closes #10308.
rustc: Add lint for unknown attributes
Add test for unknown attribute lint
rustc: Update obsolete attribute list
rustc: Add crate-level attribute lint
auto merge of #10316 : klutzy/rust/attr-lint, r=cmr

This patchset makes warning if crate-level attribute is used at other places, obsolete attributed is used, or unknown attribute is used, since they are usually from mistakes.

Closes #3348