Rust toolchain roll: update futures-preview and pin-utils

Change-Id: I36e7c2d106ba6797a26ee56b1e83e07c432bb02d
diff --git a/rustc_deps/Cargo.lock b/rustc_deps/Cargo.lock
index 17e5d92..0fbe433 100644
--- a/rustc_deps/Cargo.lock
+++ b/rustc_deps/Cargo.lock
@@ -507,7 +507,7 @@
  "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "font-rs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "fuchsia-async-macro 0.1.0",
- "futures-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
  "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -524,7 +524,7 @@
  "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "pest 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "pest_derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-utils 0.1.0-alpha.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "pretty_assertions 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "proptest 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -579,15 +579,15 @@
 
 [[package]]
 name = "futures-channel-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "futures-core-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "futures-core-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -595,61 +595,74 @@
 
 [[package]]
 name = "futures-executor-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "futures-channel-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-channel-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-util-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-utils 0.1.0-alpha.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "futures-io-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "futures-core-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "futures-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "futures-channel-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-executor-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-io-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-channel-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-executor-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-io-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-sink-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-util-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "futures-select-macro-preview"
+version = "0.3.0-alpha.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro-hack 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.23 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "futures-sink-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-channel-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-channel-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "futures-util-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-channel-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-io-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-utils 0.1.0-alpha.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-channel-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-io-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-select-macro-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-sink-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro-hack 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1132,7 +1145,7 @@
 
 [[package]]
 name = "pin-utils"
-version = "0.1.0-alpha.3"
+version = "0.1.0-alpha.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -1157,6 +1170,16 @@
 ]
 
 [[package]]
+name = "proc-macro-hack"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.23 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
 name = "proc-macro2"
 version = "0.4.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2002,13 +2025,14 @@
 "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
 "checksum font-rs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "33939d997b0ef798cc92c9cc49a535c9b085273e121cc8e8281561be1fd76cd2"
 "checksum futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)" = "49e7653e374fe0d0c12de4250f0bdb60680b8c80eed558c5c7538eec9c89e21b"
-"checksum futures-channel-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)" = "05b4b0788ee395c18d2b2d4b7c1ca5420f3086770c84b54ad122e0d69bde01d0"
-"checksum futures-core-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)" = "490d0e8280616362900dc7b188f02515a167dc96b4b040686216567170260ef8"
-"checksum futures-executor-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)" = "07ab6c8894c3550d02b3dbcdad033b0bce133490c94e832e80e230ba90af8305"
-"checksum futures-io-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)" = "bd648c32a47de058bc0194c8f7e3b65a4b6d600cfe8f858cfdce51b7eeecc3f4"
-"checksum futures-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)" = "f30923cc4c08e3f7715832fd566f6211d994d8ca765aae64df0d1e21258584e8"
-"checksum futures-sink-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)" = "9f5b158f37d752cc964f65f1dc9694d39c38faacc1ecf70846b0e7a94bdadc08"
-"checksum futures-util-preview 0.3.0-alpha.10 (registry+https://github.com/rust-lang/crates.io-index)" = "da1b10501982f32b1f95e1f3c2e1accf53b2f26c8eb21374329c8f0a985d5dcf"
+"checksum futures-channel-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)" = "88ac990a04959a1f053c1d66814641ecc2e83307b012f0f70eeda01a5cff9d43"
+"checksum futures-core-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)" = "def006cf2cbfd12264668c4099ed7293a098f5ed1e56a17c2b8982bbfba8a589"
+"checksum futures-executor-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b267447ec2b8a84cbe6ae250603268bf86b3c30315c6506b23a939af950b9e6c"
+"checksum futures-io-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad71c7781169013ee56b94316f281c3fa690244c7bd17ebc546167c6ea558bb"
+"checksum futures-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)" = "7e3846197ff6a2f25e306fea0f98b22b03c0c2d0121ff48c10dbb9a923833d64"
+"checksum futures-select-macro-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d9ef6081511aaf8f16804046829d0d3126bae9ba51c4837eea1c53f432dbfa25"
+"checksum futures-sink-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)" = "113c745dcea4f505a8b137160eb6777c785bc979e32cb6971443af356c09b373"
+"checksum futures-util-preview 0.3.0-alpha.11 (registry+https://github.com/rust-lang/crates.io-index)" = "2aabd61c42118a455d62d13fb82c98b7e936f8fdc3810104ca8d9b11c5c2f0d6"
 "checksum gcc 0.3.55 (registry+https://github.com/rust-lang/crates.io-index)" = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
 "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d"
 "checksum getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0a7292d30132fb5424b354f5dc02512a86e4c516fe544bb7a25e7f266951b797"
@@ -2065,9 +2089,10 @@
 "checksum phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "7d187f00cd98d5afbcd8898f6cf181743a449162aeb329dcd2f3849009e605ad"
 "checksum phf_generator 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "03dc191feb9b08b0dc1330d6549b795b9d81aec19efe6b4a45aec8d4caee0c4b"
 "checksum phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "b539898d22d4273ded07f64a05737649dc69095d92cb87c7097ec68e3f150b93"
-"checksum pin-utils 0.1.0-alpha.3 (registry+https://github.com/rust-lang/crates.io-index)" = "42d42579e40cc2de14252a729e9727439657cf68a4997593aafe63728544ecb3"
+"checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587"
 "checksum plist 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c61ac2afed2856590ae79d6f358a24b85ece246d2aa134741a66d589519b7503"
 "checksum pretty_assertions 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3a029430f0d744bc3d15dd474d591bed2402b645d024583082b9f63bb936dac6"
+"checksum proc-macro-hack 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "539145c26064b6a98030ef04295da99739904b152ad17eed218d5728fcf9b370"
 "checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09"
 "checksum proptest 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)" = "926d0604475349f463fe44130aae73f2294b5309ab2ca0310b998bd334ef191f"
 "checksum pulse 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "655612b6c8d96a8a02f331fe296cb4f925b68e87c1d195544675abca2d9b9af0"
diff --git a/rustc_deps/Cargo.toml b/rustc_deps/Cargo.toml
index be17778..63ca0c9 100644
--- a/rustc_deps/Cargo.toml
+++ b/rustc_deps/Cargo.toml
@@ -23,7 +23,7 @@
 failure = "0.1.1"
 font-rs = "0.1.3"
 fuchsia-async-macro = "0.1"
-futures-preview = { version = "=0.3.0-alpha.10", features = ["io-compat"] }
+futures-preview = { version = "=0.3.0-alpha.11", features = ["io-compat"] }
 getopts = "0.2"
 heck = "0.3.1"
 hex = "0.3.2"
@@ -38,7 +38,7 @@
 num = "0.2"
 num-bigint = { version = "0.2", features = ["rand"] }
 parking_lot = "0.6"
-pin-utils = "=0.1.0-alpha.3"
+pin-utils = "=0.1.0-alpha.4"
 pretty_assertions = "0.5.1"
 pest = "2.1"
 pest_derive = "2.1"
diff --git a/rustc_deps/vendor/futures-channel-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-channel-preview/.cargo-checksum.json
index c0d1784..2bff977 100644
--- a/rustc_deps/vendor/futures-channel-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-channel-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"a33edfaa7c6ea33c520445f56660e692c7273b934e8ceba9c9141a8d2d9c1a2e","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","benches/sync_mpsc.rs":"029f7782110373442a985f5b151edb3d09ae0eed41a13ac9f07d9572843fd8b0","src/lib.rs":"a6a2dfcc2dc518ed19ff5001e9cc698cd21846d6869197f0393a7df250932a18","src/lock.rs":"069d717759d9353274005630e182f080e94ba8b9e52ba94ec9a8b6e884a832d4","src/mpsc/mod.rs":"f61ff03a8b444f872b23706aa585e67fbe1bff1d159bf17e9e57672e97501b85","src/mpsc/queue.rs":"18a71782ac1e1cdc555b24c234f98f6fb08fb4cb2da66b67ae7c40a133afa212","src/oneshot.rs":"57bc5eb2cae9adcc158b462cfa8a37ccb482aa91f6c831c438bc856665ce376c","tests/channel.rs":"f45a113390c4ac4a7c0b0354c12ada9a5e8127fc6649711c22ed3ed8ea1e500c","tests/mpsc-close.rs":"b41315392df9e6fe48ab4c2bf0e36a3b32b09e4c8c4d3bac2c22f79fa7f24b1c","tests/mpsc.rs":"9f792ba34b69d9c71594a7c46cba381e423ea22d9de4df81ff8d83a213085e85","tests/oneshot.rs":"d19be518c6b4a8b361958582b2a4bb076d1210d9161719329fb95f184e484dc1"},"package":"05b4b0788ee395c18d2b2d4b7c1ca5420f3086770c84b54ad122e0d69bde01d0"}
\ No newline at end of file
+{"files":{"Cargo.toml":"9afb4f4bf9a2d8de12cecf1e15c05621b338989da90153d427ad8cd39c219a49","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","benches/sync_mpsc.rs":"d53cf3bb05b898c6225124bcc5577af7d311a42ed0cf57c881f0c28806513e37","src/lib.rs":"b6a7dd6d8d890aec74aa4c975c8d4046648dc06442a19eb7d6918f64b41c9a04","src/lock.rs":"069d717759d9353274005630e182f080e94ba8b9e52ba94ec9a8b6e884a832d4","src/mpsc/mod.rs":"edaa7fc817abe4a77d8933afe7dbf4716787b24311e1401e2313296131ac0c53","src/mpsc/queue.rs":"18a71782ac1e1cdc555b24c234f98f6fb08fb4cb2da66b67ae7c40a133afa212","src/oneshot.rs":"57bc5eb2cae9adcc158b462cfa8a37ccb482aa91f6c831c438bc856665ce376c","tests/channel.rs":"f45a113390c4ac4a7c0b0354c12ada9a5e8127fc6649711c22ed3ed8ea1e500c","tests/mpsc-close.rs":"b41315392df9e6fe48ab4c2bf0e36a3b32b09e4c8c4d3bac2c22f79fa7f24b1c","tests/mpsc.rs":"53403a55a77df2a6e22bb883589cc62a121f10483593d7c49454a088cea99535","tests/oneshot.rs":"b7fcfbf14d8ceab2dbaaac6b6f059cd845e6eabcdefcf297fed707aa95d0308c"},"package":"88ac990a04959a1f053c1d66814641ecc2e83307b012f0f70eeda01a5cff9d43"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-channel-preview/Cargo.toml b/rustc_deps/vendor/futures-channel-preview/Cargo.toml
index defd989..98e0876 100644
--- a/rustc_deps/vendor/futures-channel-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-channel-preview/Cargo.toml
@@ -13,18 +13,18 @@
 [package]
 edition = "2018"
 name = "futures-channel-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "Channels for asynchronous communication using futures-rs.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures_channel"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_channel"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang-nursery/futures-rs"
 
 [lib]
 name = "futures_channel"
 [dependencies.futures-core-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [features]
diff --git a/rustc_deps/vendor/futures-channel-preview/benches/sync_mpsc.rs b/rustc_deps/vendor/futures-channel-preview/benches/sync_mpsc.rs
index 8e801b1..2866256 100644
--- a/rustc_deps/vendor/futures-channel-preview/benches/sync_mpsc.rs
+++ b/rustc_deps/vendor/futures-channel-preview/benches/sync_mpsc.rs
@@ -1,4 +1,4 @@
-#![feature(test, futures_api, pin, arbitrary_self_types)]
+#![feature(test, futures_api)]
 
 extern crate test;
 use crate::test::Bencher;
diff --git a/rustc_deps/vendor/futures-channel-preview/src/lib.rs b/rustc_deps/vendor/futures-channel-preview/src/lib.rs
index e211405..da4680b 100644
--- a/rustc_deps/vendor/futures-channel-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-channel-preview/src/lib.rs
@@ -3,14 +3,14 @@
 //! This crate provides channels that can be used to communicate between
 //! asynchronous tasks.
 
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 #![cfg_attr(not(feature = "std"), no_std)]
 
 #![warn(missing_docs, missing_debug_implementations)]
 #![deny(bare_trait_objects)]
 
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures_channel")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_channel")]
 
 #[cfg(feature = "std")]
 mod lock;
diff --git a/rustc_deps/vendor/futures-channel-preview/src/mpsc/mod.rs b/rustc_deps/vendor/futures-channel-preview/src/mpsc/mod.rs
index 0e3581e..052fd15 100644
--- a/rustc_deps/vendor/futures-channel-preview/src/mpsc/mod.rs
+++ b/rustc_deps/vendor/futures-channel-preview/src/mpsc/mod.rs
@@ -78,7 +78,7 @@
 // happens-before semantics required for the acquire / release semantics used
 // by the queue structure.
 
-use futures_core::stream::Stream;
+use futures_core::stream::{FusedStream, Stream};
 use futures_core::task::{LocalWaker, Waker, Poll};
 use futures_core::task::__internal::AtomicWaker;
 use std::any::Any;
@@ -130,7 +130,7 @@
 /// This value is created by the [`channel`](channel) function.
 #[derive(Debug)]
 pub struct Receiver<T> {
-    inner: Arc<Inner<T>>,
+    inner: Option<Arc<Inner<T>>>,
 }
 
 /// The receiving end of an unbounded mpsc channel.
@@ -393,7 +393,7 @@
     };
 
     let rx = Receiver {
-        inner,
+        inner: Some(inner),
     };
 
     (tx, rx)
@@ -737,12 +737,14 @@
     /// This prevents any further messages from being sent on the channel while
     /// still enabling the receiver to drain messages that are buffered.
     pub fn close(&mut self) {
-        self.inner.set_closed();
+        if let Some(inner) = &mut self.inner {
+            inner.set_closed();
 
-        // Wake up any threads waiting as they'll see that we've closed the
-        // channel and will continue on their merry way.
-        while let Some(task) = unsafe { self.inner.parked_queue.pop_spin() } {
-            task.lock().unwrap().notify();
+            // Wake up any threads waiting as they'll see that we've closed the
+            // channel and will continue on their merry way.
+            while let Some(task) = unsafe { inner.parked_queue.pop_spin() } {
+                task.lock().unwrap().notify();
+            }
         }
     }
 
@@ -751,6 +753,9 @@
     /// It is not recommended to call this function from inside of a future,
     /// only when you've otherwise arranged to be notified when the channel is
     /// no longer empty.
+    ///
+    /// This function will panic if called after `try_next` or `poll_next` has
+    /// returned None.
     pub fn try_next(&mut self) -> Result<Option<T>, TryRecvError> {
         match self.next_message() {
             Poll::Ready(msg) => {
@@ -761,8 +766,9 @@
     }
 
     fn next_message(&mut self) -> Poll<Option<T>> {
+        let inner = self.inner.as_mut().expect("Receiver::next_message called after `None`");
         // Pop off a message
-        match unsafe { self.inner.message_queue.pop_spin() } {
+        match unsafe { inner.message_queue.pop_spin() } {
             Some(msg) => {
                 // If there are any parked task handles in the parked queue,
                 // pop one and unpark it.
@@ -774,7 +780,7 @@
                 Poll::Ready(Some(msg))
             }
             None => {
-                let state = decode_state(self.inner.state.load(SeqCst));
+                let state = decode_state(inner.state.load(SeqCst));
                 if state.is_open || state.num_messages != 0 {
                     // If queue is open, we need to return Pending
                     // to be woken up when new messages arrive.
@@ -787,6 +793,7 @@
                 } else {
                     // If closed flag is set AND there are no pending messages
                     // it means end of stream
+                    self.inner = None;
                     Poll::Ready(None)
                 }
             }
@@ -795,22 +802,32 @@
 
     // Unpark a single task handle if there is one pending in the parked queue
     fn unpark_one(&mut self) {
-        if let Some(task) = unsafe { self.inner.parked_queue.pop_spin() } {
-            task.lock().unwrap().notify();
+        if let Some(inner) = &mut self.inner {
+            if let Some(task) = unsafe { inner.parked_queue.pop_spin() } {
+                task.lock().unwrap().notify();
+            }
         }
     }
 
     fn dec_num_messages(&self) {
-        // OPEN_MASK is highest bit, so it's unaffected by subtraction
-        // unless there's underflow, and we know there's no underflow
-        // because number of messages at this point is always > 0.
-        self.inner.state.fetch_sub(1, SeqCst);
+        if let Some(inner) = &self.inner {
+            // OPEN_MASK is highest bit, so it's unaffected by subtraction
+            // unless there's underflow, and we know there's no underflow
+            // because number of messages at this point is always > 0.
+            inner.state.fetch_sub(1, SeqCst);
+        }
     }
 }
 
 // The receiver does not ever take a Pin to the inner T
 impl<T> Unpin for Receiver<T> {}
 
+impl<T> FusedStream for Receiver<T> {
+    fn is_terminated(&self) -> bool {
+        self.inner.is_none()
+    }
+}
+
 impl<T> Stream for Receiver<T> {
     type Item = T;
 
@@ -820,10 +837,15 @@
     ) -> Poll<Option<T>> {
             // Try to read a message off of the message queue.
         match self.next_message() {
-            Poll::Ready(msg) => Poll::Ready(msg),
+            Poll::Ready(msg) => {
+                if msg.is_none() {
+                    self.inner = None;
+                }
+                Poll::Ready(msg)
+            },
             Poll::Pending => {
                 // There are no messages to read, in this case, park.
-                self.inner.recv_task.register(lw);
+                self.inner.as_ref().unwrap().recv_task.register(lw);
                 // Check queue again after parking to prevent race condition:
                 // a message could be added to the queue after previous `next_message`
                 // before `register` call.
@@ -837,8 +859,10 @@
     fn drop(&mut self) {
         // Drain the channel of all pending messages
         self.close();
-        while let Poll::Ready(Some(..)) = self.next_message() {
-            // ...
+        if self.inner.is_some() {
+            while let Poll::Ready(Some(..)) = self.next_message() {
+                // ...
+            }
         }
     }
 }
@@ -857,11 +881,20 @@
     /// It is not recommended to call this function from inside of a future,
     /// only when you've otherwise arranged to be notified when the channel is
     /// no longer empty.
+    ///
+    /// This function will panic if called after `try_next` or `poll_next` has
+    /// returned None.
     pub fn try_next(&mut self) -> Result<Option<T>, TryRecvError> {
         self.0.try_next()
     }
 }
 
+impl<T> FusedStream for UnboundedReceiver<T> {
+    fn is_terminated(&self) -> bool {
+        self.0.is_terminated()
+    }
+}
+
 impl<T> Stream for UnboundedReceiver<T> {
     type Item = T;
 
diff --git a/rustc_deps/vendor/futures-channel-preview/tests/mpsc.rs b/rustc_deps/vendor/futures-channel-preview/tests/mpsc.rs
index 182f206..f40de41 100644
--- a/rustc_deps/vendor/futures-channel-preview/tests/mpsc.rs
+++ b/rustc_deps/vendor/futures-channel-preview/tests/mpsc.rs
@@ -1,4 +1,4 @@
-#![feature(futures_api, async_await, await_macro, pin)]
+#![feature(futures_api, async_await, await_macro)]
 
 use futures::channel::{mpsc, oneshot};
 use futures::executor::{block_on, block_on_stream};
@@ -6,6 +6,7 @@
 use futures::stream::{Stream, StreamExt};
 use futures::sink::{Sink, SinkExt};
 use futures::task::Poll;
+use futures_test::task::noop_local_waker_ref;
 use pin_utils::pin_mut;
 use std::sync::{Arc, Mutex};
 use std::sync::atomic::{AtomicUsize, Ordering};
@@ -140,8 +141,6 @@
     // Run on a task context
     block_on(poll_fn(move |lw| {
         assert_eq!(rx.poll_next_unpin(lw), Poll::Ready(None));
-        assert_eq!(rx.poll_next_unpin(lw), Poll::Ready(None));
-
         Poll::Ready(())
     }));
 }
@@ -277,7 +276,7 @@
     const NTHREADS: u32 = 2;
 
     let (mut tx, rx) = mpsc::channel::<usize>(0);
-    let rx = Arc::new(Mutex::new(rx));
+    let rx = Arc::new(Mutex::new(Some(rx)));
     let n = Arc::new(AtomicUsize::new(0));
 
     let mut th = vec![];
@@ -291,35 +290,33 @@
 
             loop {
                 i += 1;
-                let mut rx = rx.lock().unwrap();
+                let mut rx_opt = rx.lock().unwrap();
+                if let Some(rx) = &mut *rx_opt {
+                    if i % 5 == 0 {
+                        let item = block_on(rx.next());
 
-                if i % 5 == 0 {
-                    let item = block_on(rx.next());
+                        if item.is_none() {
+                            *rx_opt = None;
+                            break;
+                        }
 
-                    if item.is_none() {
-                        break;
-                    }
-
-                    n.fetch_add(1, Ordering::Relaxed);
-                } else {
-                    // Just poll
-                    let n = n.clone();
-                    let f = poll_fn(move |lw| {
-                        let r = match rx.poll_next_unpin(lw) {
+                        n.fetch_add(1, Ordering::Relaxed);
+                    } else {
+                        // Just poll
+                        let n = n.clone();
+                        match rx.poll_next_unpin(noop_local_waker_ref()) {
                             Poll::Ready(Some(_)) => {
                                 n.fetch_add(1, Ordering::Relaxed);
-                                false
                             }
-                            Poll::Ready(None) => true,
-                            Poll::Pending => false,
-                        };
-
-                        Poll::Ready(r)
-                    });
-
-                    if block_on(f) {
-                        break;
+                            Poll::Ready(None) => {
+                                *rx_opt = None;
+                                break
+                            },
+                            Poll::Pending => {},
+                        }
                     }
+                } else {
+                    break;
                 }
             }
         });
diff --git a/rustc_deps/vendor/futures-channel-preview/tests/oneshot.rs b/rustc_deps/vendor/futures-channel-preview/tests/oneshot.rs
index 4b4aecc..a025b66 100644
--- a/rustc_deps/vendor/futures-channel-preview/tests/oneshot.rs
+++ b/rustc_deps/vendor/futures-channel-preview/tests/oneshot.rs
@@ -1,4 +1,4 @@
-#![feature(futures_api, arbitrary_self_types, pin)]
+#![feature(futures_api)]
 
 use futures::channel::oneshot::{self, Sender};
 use futures::executor::block_on;
diff --git a/rustc_deps/vendor/futures-core-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-core-preview/.cargo-checksum.json
index 584ac45..79f6f25 100644
--- a/rustc_deps/vendor/futures-core-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-core-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"77bde85e279cf158255da9c680d8cf148df6c9d1ce68d236c7c646ba4b4be47b","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/future/future_obj.rs":"e3d86f920f60ca920b1363828cc4170ba7fc558cfd805cee1637c1d7b7fcddc1","src/future/mod.rs":"333ea0a9cb52fe4a0d974900e5d4ab7a8f2d28c02c5505eb94b522cfd045bfdd","src/lib.rs":"ad5dc6fb8bc1ce37eebbc29cefc5f4b11f6d6e55abbe6632ee142d5aef73d48c","src/stream/mod.rs":"72ece19be47f095de682352a48c9619b099255565ff58e57a53ec413980d834a","src/stream/stream_obj.rs":"4037cefab9c83bb080cf0e8ccffe4bc0e5dddee42481b67bd7725e81bbbc94d7","src/task/__internal/atomic_waker.rs":"9433e4078fe4677f2a36ea5dc86dac44caadc1c0c8197c3b8849102e88478f24","src/task/__internal/mod.rs":"874e4c5a945c4b95ecef58b07b5009576c13c8b15550987a89718237d12fabea","src/task/mod.rs":"09bf10cc3428ba166d5942c8c5400ea0a03c4b64898a5a3bfe6f19010143bdec","src/task/spawn.rs":"733572db0157b98e3b77b4af6e0b7d9b209fe6c9da50db773cd876d7ce344b8d"},"package":"490d0e8280616362900dc7b188f02515a167dc96b4b040686216567170260ef8"}
\ No newline at end of file
+{"files":{"Cargo.toml":"bea6e7279f1cb5c4c5e62413292d0837eb63ed1425ef560a16b55b134404dcc9","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/future/future_obj.rs":"731c5d0d367082e674243b4768b160912ba877550a4bdc4e39351acd42a7d161","src/future/mod.rs":"333ea0a9cb52fe4a0d974900e5d4ab7a8f2d28c02c5505eb94b522cfd045bfdd","src/lib.rs":"1aa193376c562ebe2bc849f4b17fa1eaf1df57bf5afa4e238e9ed8a8bc427f0f","src/stream/mod.rs":"d1ff8531800506fea6360a4155a03886f452f66ca684aaf539229c0525f580e7","src/stream/stream_obj.rs":"28ff5e02fed9066ec8c954e48168c8c9d1acd1fe3aaabedb9bd88678f2e23d16","src/task/__internal/atomic_waker.rs":"5b4efb8fd674898917ac6eae9a5f15761e93b6f6460985265cdeaf6cf4706eb8","src/task/__internal/mod.rs":"874e4c5a945c4b95ecef58b07b5009576c13c8b15550987a89718237d12fabea","src/task/mod.rs":"09bf10cc3428ba166d5942c8c5400ea0a03c4b64898a5a3bfe6f19010143bdec","src/task/spawn.rs":"733572db0157b98e3b77b4af6e0b7d9b209fe6c9da50db773cd876d7ce344b8d"},"package":"def006cf2cbfd12264668c4099ed7293a098f5ed1e56a17c2b8982bbfba8a589"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-core-preview/Cargo.toml b/rustc_deps/vendor/futures-core-preview/Cargo.toml
index 9a4a97b..8461160 100644
--- a/rustc_deps/vendor/futures-core-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-core-preview/Cargo.toml
@@ -10,16 +10,14 @@
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
-cargo-features = ["rename-dependency"]
-
 [package]
 edition = "2018"
 name = "futures-core-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "The core traits and types in for the `futures` library.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures_core"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_core"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang-nursery/futures-rs"
 
diff --git a/rustc_deps/vendor/futures-core-preview/src/future/future_obj.rs b/rustc_deps/vendor/futures-core-preview/src/future/future_obj.rs
index 1d73f41..bcc07b7 100644
--- a/rustc_deps/vendor/futures-core-preview/src/future/future_obj.rs
+++ b/rustc_deps/vendor/futures-core-preview/src/future/future_obj.rs
@@ -173,7 +173,7 @@
     F: Future<Output = T> + 'a
 {
     fn into_raw(mut self) -> *mut () {
-        let mut_ref: &mut F = unsafe { Pin::get_mut_unchecked(Pin::as_mut(&mut self)) };
+        let mut_ref: &mut F = unsafe { Pin::get_unchecked_mut(Pin::as_mut(&mut self)) };
         mut_ref as *mut F as *mut ()
     }
 
@@ -213,7 +213,7 @@
         F: Future<Output = T> + 'a
     {
         fn into_raw(mut self) -> *mut () {
-            let mut_ref: &mut F = unsafe { Pin::get_mut_unchecked(Pin::as_mut(&mut self)) };
+            let mut_ref: &mut F = unsafe { Pin::get_unchecked_mut(Pin::as_mut(&mut self)) };
             let ptr = mut_ref as *mut F as *mut ();
             mem::forget(self); // Don't drop the box
             ptr
diff --git a/rustc_deps/vendor/futures-core-preview/src/lib.rs b/rustc_deps/vendor/futures-core-preview/src/lib.rs
index 0299fa5..c847cfc 100644
--- a/rustc_deps/vendor/futures-core-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-core-preview/src/lib.rs
@@ -1,6 +1,6 @@
 //! Core traits and types for asynchronous operations in Rust.
 
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 #![cfg_attr(feature = "nightly", feature(cfg_target_has_atomic))]
 
 #![cfg_attr(not(feature = "std"), no_std)]
@@ -8,7 +8,7 @@
 #![warn(missing_docs, missing_debug_implementations)]
 #![deny(bare_trait_objects)]
 
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures_core")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_core")]
 
 pub mod future;
 #[doc(hidden)] pub use self::future::{Future, FusedFuture, TryFuture};
diff --git a/rustc_deps/vendor/futures-core-preview/src/stream/mod.rs b/rustc_deps/vendor/futures-core-preview/src/stream/mod.rs
index de7e00e..e944592 100644
--- a/rustc_deps/vendor/futures-core-preview/src/stream/mod.rs
+++ b/rustc_deps/vendor/futures-core-preview/src/stream/mod.rs
@@ -71,7 +71,7 @@
 
 impl<P> Stream for Pin<P>
 where
-    P: ops::DerefMut,
+    P: ops::DerefMut + Unpin,
     P::Target: Stream,
 {
     type Item = <P::Target as Stream>::Item;
@@ -93,7 +93,7 @@
 
     fn poll_next(self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Option<A::Item>> {
         unsafe {
-            match Pin::get_mut_unchecked(self) {
+            match Pin::get_unchecked_mut(self) {
                 Either::Left(a) => Pin::new_unchecked(a).poll_next(lw),
                 Either::Right(b) => Pin::new_unchecked(b).poll_next(lw),
             }
diff --git a/rustc_deps/vendor/futures-core-preview/src/stream/stream_obj.rs b/rustc_deps/vendor/futures-core-preview/src/stream/stream_obj.rs
index 93c6df4..35ba24d 100644
--- a/rustc_deps/vendor/futures-core-preview/src/stream/stream_obj.rs
+++ b/rustc_deps/vendor/futures-core-preview/src/stream/stream_obj.rs
@@ -175,7 +175,7 @@
     F: Stream<Item = T> + 'a,
 {
     fn into_raw(self) -> *mut () {
-        unsafe { Pin::get_mut_unchecked(self) as *mut F as *mut () }
+        unsafe { Pin::get_unchecked_mut(self) as *mut F as *mut () }
     }
 
     unsafe fn poll_next(
@@ -215,7 +215,7 @@
         where F: Stream<Item = T> + 'a
     {
         fn into_raw(mut self) -> *mut () {
-            let mut_ref: &mut F = unsafe { Pin::get_mut_unchecked(Pin::as_mut(&mut self)) };
+            let mut_ref: &mut F = unsafe { Pin::get_unchecked_mut(Pin::as_mut(&mut self)) };
             let ptr = mut_ref as *mut F as *mut ();
             mem::forget(self); // Don't drop the box
             ptr
diff --git a/rustc_deps/vendor/futures-core-preview/src/task/__internal/atomic_waker.rs b/rustc_deps/vendor/futures-core-preview/src/task/__internal/atomic_waker.rs
index 013f2f2..4a7e545 100644
--- a/rustc_deps/vendor/futures-core-preview/src/task/__internal/atomic_waker.rs
+++ b/rustc_deps/vendor/futures-core-preview/src/task/__internal/atomic_waker.rs
@@ -169,7 +169,7 @@
     /// Here is how `register` is used when implementing a flag.
     ///
     /// ```
-    /// #![feature(pin, arbitrary_self_types, futures_api)]
+    /// #![feature(futures_api)]
     /// use futures::future::Future;
     /// use futures::task::{LocalWaker, Poll, AtomicWaker};
     /// use std::sync::atomic::AtomicBool;
diff --git a/rustc_deps/vendor/futures-executor-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-executor-preview/.cargo-checksum.json
index 2619ce4..4ab6cc9 100644
--- a/rustc_deps/vendor/futures-executor-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-executor-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"5053b320694f2adf1134bf3e5f59206bab034a5cbc0bb286965cc5f9c599c297","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","benches/thread_notify.rs":"11075595b09e324cd185fcf0604f36bcd4df9a99c95726c58701a3d530ea3249","src/enter.rs":"96f74df35aca1de4dbec9d051482d4957ff56209e44ced6f489ac9cb15df6ba6","src/lib.rs":"eb04358787c43734dedd3c4028ed239e659347b8865b1f099827fa285f719158","src/local_pool.rs":"5dd82276ce9a741c668bfbd30bf74e34226a87d10d447665efd403c6c198aa57","src/thread_pool.rs":"6870eca358af085458322df1fe9d38536318cfd2671c8a136bb9a79208ba9995","src/unpark_mutex.rs":"7d37d56bd632fbd49e232e057ac55517f9714745eacc72c397aa07bb14450840","tests/local_pool.rs":"2bed595bdb0610fe8c53581a9964fe8b5c5b83def120249d83884acae8124007"},"package":"07ab6c8894c3550d02b3dbcdad033b0bce133490c94e832e80e230ba90af8305"}
\ No newline at end of file
+{"files":{"Cargo.toml":"0f9ea42a518b19c73311d92f4f66b54e48c3f5875678b5cc7030f487b0347533","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","benches/thread_notify.rs":"4ae112bcd35a2d87f4056028fa764a3e007d2793935fa5c5ba7e5012e8f76e9c","src/enter.rs":"96f74df35aca1de4dbec9d051482d4957ff56209e44ced6f489ac9cb15df6ba6","src/lib.rs":"b5561bc772dcf8e9e0699f150ff38b5eb54ff46a62880caca98ef042dec1c56a","src/local_pool.rs":"0295a2cb362eeff006da594db064aaa665722fb017843018b53485e93fa5fb3a","src/thread_pool.rs":"6870eca358af085458322df1fe9d38536318cfd2671c8a136bb9a79208ba9995","src/unpark_mutex.rs":"7d37d56bd632fbd49e232e057ac55517f9714745eacc72c397aa07bb14450840","tests/local_pool.rs":"78f40be7b7e5e2cc31c8ff41e7e65132402c734cbd1c8e889d14b6e4ae392c21"},"package":"b267447ec2b8a84cbe6ae250603268bf86b3c30315c6506b23a939af950b9e6c"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-executor-preview/Cargo.toml b/rustc_deps/vendor/futures-executor-preview/Cargo.toml
index d97a998..be24922 100644
--- a/rustc_deps/vendor/futures-executor-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-executor-preview/Cargo.toml
@@ -13,26 +13,26 @@
 [package]
 edition = "2018"
 name = "futures-executor-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "Executors for asynchronous tasks based on the futures-rs library.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures_executor"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_executor"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang-nursery/futures-rs"
 
 [lib]
 name = "futures_executor"
 [dependencies.futures-channel-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.futures-core-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.futures-util-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.lazy_static]
@@ -44,7 +44,7 @@
 optional = true
 
 [dependencies.pin-utils]
-version = "0.1.0-alpha.3"
+version = "0.1.0-alpha.4"
 
 [features]
 default = ["std"]
diff --git a/rustc_deps/vendor/futures-executor-preview/benches/thread_notify.rs b/rustc_deps/vendor/futures-executor-preview/benches/thread_notify.rs
index da2579a..c5df96e 100644
--- a/rustc_deps/vendor/futures-executor-preview/benches/thread_notify.rs
+++ b/rustc_deps/vendor/futures-executor-preview/benches/thread_notify.rs
@@ -1,4 +1,4 @@
-#![feature(test, futures_api, pin, arbitrary_self_types)]
+#![feature(test, futures_api)]
 
 extern crate test;
 use crate::test::Bencher;
diff --git a/rustc_deps/vendor/futures-executor-preview/src/lib.rs b/rustc_deps/vendor/futures-executor-preview/src/lib.rs
index a19c660..a66e53e 100644
--- a/rustc_deps/vendor/futures-executor-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-executor-preview/src/lib.rs
@@ -1,13 +1,13 @@
 //! Built-in executors and related tools.
 
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 #![cfg_attr(not(feature = "std"), no_std)]
 
 #![warn(missing_docs, missing_debug_implementations)]
 #![deny(bare_trait_objects)]
 
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures_executor")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_executor")]
 
 #[cfg(feature = "std")]
 mod local_pool;
diff --git a/rustc_deps/vendor/futures-executor-preview/src/local_pool.rs b/rustc_deps/vendor/futures-executor-preview/src/local_pool.rs
index 62f9dab..15b6a26 100644
--- a/rustc_deps/vendor/futures-executor-preview/src/local_pool.rs
+++ b/rustc_deps/vendor/futures-executor-preview/src/local_pool.rs
@@ -124,7 +124,7 @@
     /// the `LocalPool` by using its spawner handle:
     ///
     /// ```
-    /// #![feature(pin, arbitrary_self_types, futures_api)]
+    /// #![feature(futures_api)]
     /// use futures::executor::LocalPool;
     /// use futures::future::ready;
     ///
diff --git a/rustc_deps/vendor/futures-executor-preview/tests/local_pool.rs b/rustc_deps/vendor/futures-executor-preview/tests/local_pool.rs
index f06c782..4cfa2cd 100644
--- a/rustc_deps/vendor/futures-executor-preview/tests/local_pool.rs
+++ b/rustc_deps/vendor/futures-executor-preview/tests/local_pool.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::channel::oneshot;
 use futures::executor::LocalPool;
@@ -42,7 +42,7 @@
 fn run_until_ignores_spawned() {
     let mut pool = LocalPool::new();
     let mut spawn = pool.spawner();
-    spawn.spawn_local_obj(Box::pinned(pending()).into()).unwrap();
+    spawn.spawn_local_obj(Box::pin(pending()).into()).unwrap();
     assert_eq!(pool.run_until(lazy(|_| ())), ());
 }
 
@@ -51,7 +51,7 @@
     let (tx, rx) = oneshot::channel();
     let mut pool = LocalPool::new();
     let mut spawn = pool.spawner();
-    spawn.spawn_local_obj(Box::pinned(lazy(move |_| {
+    spawn.spawn_local_obj(Box::pin(lazy(move |_| {
         tx.send(()).unwrap();
         ()
     })).into()).unwrap();
@@ -67,8 +67,8 @@
     let mut spawn = pool.spawner();
     let mut spawn2 = pool.spawner();
 
-    spawn.spawn_local_obj(Box::pinned(lazy(move |_| {
-        spawn2.spawn_local_obj(Box::pinned(lazy(move |_| {
+    spawn.spawn_local_obj(Box::pin(lazy(move |_| {
+        spawn2.spawn_local_obj(Box::pin(lazy(move |_| {
             cnt2.set(cnt2.get() + 1);
             ()
         })).into()).unwrap();
@@ -92,7 +92,7 @@
 
     for _ in 0..ITER {
         let cnt = cnt.clone();
-        spawn.spawn_local_obj(Box::pinned(lazy(move |_| {
+        spawn.spawn_local_obj(Box::pin(lazy(move |_| {
             cnt.set(cnt.get() + 1);
             ()
         })).into()).unwrap();
@@ -109,7 +109,7 @@
     let mut pool = LocalPool::new();
     let mut spawn = pool.spawner();
 
-    spawn.spawn_obj(Box::pinned(lazy(|_| {
+    spawn.spawn_obj(Box::pin(lazy(|_| {
         let mut pool = LocalPool::new();
         pool.run();
     })).into()).unwrap();
@@ -155,12 +155,12 @@
     let mut pool = LocalPool::new();
     let mut spawn = pool.spawner();
 
-    spawn.spawn_local_obj(Box::pinned(Spin {
+    spawn.spawn_local_obj(Box::pin(Spin {
         state: state.clone(),
         idx: 0,
     }).into()).unwrap();
 
-    spawn.spawn_local_obj(Box::pinned(Spin {
+    spawn.spawn_local_obj(Box::pin(Spin {
         state: state,
         idx: 1,
     }).into()).unwrap();
diff --git a/rustc_deps/vendor/futures-io-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-io-preview/.cargo-checksum.json
index 8f47893..6862d6a 100644
--- a/rustc_deps/vendor/futures-io-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-io-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"e68aeed526f3d6df6cd98ce3b92ca77d107e4b9f0622d7d539be104cf8e3632c","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/lib.rs":"89b47fb4f53dd002af21abfa8a01f44c0ba8d81a6a040bed5992389c747410c6","tests/cursor.rs":"663dbdd2a7ac4aa21636dbe0f46e444f5c613d4afdc5aed669ecf080ed297189"},"package":"bd648c32a47de058bc0194c8f7e3b65a4b6d600cfe8f858cfdce51b7eeecc3f4"}
\ No newline at end of file
+{"files":{"Cargo.toml":"da3cd150bc1011c8683bbf3668352a08b645d73df6d36395e6e7598cb7f0e5e9","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/lib.rs":"030379135044bc2a59fdade0a8b024f34af839941feb293b0af35a47acb67449","tests/cursor.rs":"663dbdd2a7ac4aa21636dbe0f46e444f5c613d4afdc5aed669ecf080ed297189"},"package":"2ad71c7781169013ee56b94316f281c3fa690244c7bd17ebc546167c6ea558bb"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-io-preview/Cargo.toml b/rustc_deps/vendor/futures-io-preview/Cargo.toml
index da4f1a2..990fac2 100644
--- a/rustc_deps/vendor/futures-io-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-io-preview/Cargo.toml
@@ -13,18 +13,18 @@
 [package]
 edition = "2018"
 name = "futures-io-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "The `AsyncRead` and `AsyncWrite` traits for the futures-rs library.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures_io"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_io"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang-nursery/futures-rs"
 
 [lib]
 name = "futures_io"
 [dependencies.futures-core-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.iovec]
diff --git a/rustc_deps/vendor/futures-io-preview/src/lib.rs b/rustc_deps/vendor/futures-io-preview/src/lib.rs
index dd3ff9c..936a4fb 100644
--- a/rustc_deps/vendor/futures-io-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-io-preview/src/lib.rs
@@ -9,7 +9,7 @@
 #![warn(missing_docs, missing_debug_implementations)]
 #![deny(bare_trait_objects)]
 
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures_io")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_io")]
 
 #![feature(futures_api)]
 
diff --git a/rustc_deps/vendor/futures-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-preview/.cargo-checksum.json
index a9d7c0b..5645d70 100644
--- a/rustc_deps/vendor/futures-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"59f74e124580938195263b3e3dfe9c4f28c858cab56449091e714dc0d6dfa83b","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/lib.rs":"c5a7fc323eab45d036f159aeaa7372ef5f6676371849745c43f719bf479b8989","tests/abortable.rs":"6812f2c6a7130c9e4c3d34935b96dbeb8ba661bb501b68d587914fb6328fe7f2","tests/async_await_macros.rs":"9db38ce4e3ca7981a0fd50e64365fb89a5dfa3fd45a1176f93e6888092903a39","tests/basic_combinators.rs":"9f2c9dcbbcec0aa55413fd1cffa3c04a2a6a661d2fa22cd422a270bc71ffd629","tests/compat.rs":"41843a3e055af4e091d1b5cea1d2fc9ff839b85b608f9316b6a755a514d0ba70","tests/eager_drop.rs":"82a8c7d76a402e0afd52510f312081db7578d3b6a277315ebda8d76fa53a904e","tests/fuse.rs":"670fbd943bf0a9a6caa9870edb59d336335ed2e1fe24b7a7163d85211720a5b3","tests/future_obj.rs":"5be9bb0085e5c706c6771095b823b31205da9b885ed2e51e25f34f1ce5f80dd4","tests/futures_ordered.rs":"3c44097f991d6ac51adb4c8479213a53fd57bc774f996fc02a63af5e1a26480d","tests/futures_unordered.rs":"2f18f47dc12bbaa4af6059ff8c96e2e150a964d87a1bae350d86f53d686d5124","tests/inspect.rs":"d08edcd38e0ec597e5ff9a04ad2c1aa1074a41c84070dc65e224e862a8613a32","tests/io_read_exact.rs":"250a3c900f63d0aaf225ad28b6c3222caac9873a0eae2a3f17d1a6d288c3ac07","tests/join_all.rs":"e18c557c25653a6c53c0827330b30d1a39e4fb04da8fddd7388e4aea20cc419e","tests/oneshot.rs":"88decfc791b19896c78cb8a6ad2f04c18d0765cd3bc12cd6136b3314e11b6970","tests/recurse.rs":"3b72759ed2a0f81d2586d6768b21debe2783755b4137877dac54913f3a7ef623","tests/shared.rs":"b03f425019b922b9d215249337aea474451c096602dbe3f2ded239e69aa86489","tests/split.rs":"00f8cebba4c7b4eed51e0177e37d8ae718cd0f1bc5cdfb86fa70e690a854edae","tests/unfold.rs":"8b01edaa45034968de428592bed6076b797d091dc23845873253c38e2f5f4ed4","tests_disabled/all.rs":"038e4dc5b6a3585437a20ef3218bcc3f1010d59395d261ab0a71ecc2530fb348","tests_disabled/async_await/elisions.rs":"629be3760ef4e40365572f7dff19770b084171eae25019b88c4c2e5280fb189d","tests_disabled/async_await/mod.rs":"b821c40b8a01df25b577dedc76a4c0fab7e3026f2e0f666a33853fb10fb082c8","tests_disabled/async_await/pinned.rs":"c2e32cdd004032457e0b889f0e61ee5d1719603208c14bc99d0d89a126e1dd7d","tests_disabled/async_await/smoke.rs":"baf44520e8e9e39a1093e1769fdce0ebf4e5afcc4abf75f03f072a597b19734c","tests_disabled/async_await_tests.rs":"1782badb827c2822b8d3aba2172222f190eb7b8daf1ef9482240f38c314e29ce","tests_disabled/buffer_unordered.rs":"ad2b1a78b16bd87e412d25d3e387c7cc4495e585619d35c5a2b7087dac376922","tests_disabled/eventual.rs":"fd2456c07be6372e5f35a56db9e5a54eab844dae27c03e86772a8203a2184a76","tests_disabled/future_flatten_stream.rs":"f3a26f059a6a6b3544ec15e9d26b53e066554c468eb90566a44be2cd3e30c07d","tests_disabled/ready_queue.rs":"eb065aeb70005eca9c117956c9a1158245d7fc7e569cb6390a8049b97011faf8","tests_disabled/select_all.rs":"77dac9d9609f76abfa1078c74cd4643fad2e379f1de43abe46e13e54e8ec20ea","tests_disabled/select_ok.rs":"2fb035c4880ef4851a12e826ca05b9caad4eadc4b50df88a42ea5f66344d5041","tests_disabled/sink.rs":"5e48bc306bbd582a6e2caebf24c4ff5fb68ce6874628c5a30d73afd79baa37e6","tests_disabled/stream.rs":"f41e9e0264f3a4e60a37a4f4fba7c3ed73261ef305dfcea91810da7c4f1cfae1","tests_disabled/stream_catch_unwind.rs":"a0a41d07f1caf9544e830ac7e5dcfb991c99fdb997b855cb288de74f25c7e1f3","tests_disabled/stream_select_all.rs":"3caf33401e9dbb69dbbc3a6b701fb495bffaccbf3e854fa5a5346a61bb11e193"},"package":"f30923cc4c08e3f7715832fd566f6211d994d8ca765aae64df0d1e21258584e8"}
\ No newline at end of file
+{"files":{"Cargo.toml":"10a3631f93ca917cf3b666dbba15187c2746b014462a12a8ba0d17df433c6f1f","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/lib.rs":"e80a376f3680ba78207b844c26094c1ac5c9565a36a2aff1e63086907f0e509b","tests/abortable.rs":"7a1b9319b90a5828605c6974577c7d878b0e2aae1413de6a3a2afd70f08a7bf3","tests/async_await_macros.rs":"4b64523bafffc5cece40bb1a91aaf4927efbf4a972a50bce1c470988c96e2c40","tests/basic_combinators.rs":"d65bbfc62cb2622cda7a139ad826f975d7d81034291646a65bff4fb38433cd7b","tests/compat.rs":"41843a3e055af4e091d1b5cea1d2fc9ff839b85b608f9316b6a755a514d0ba70","tests/eager_drop.rs":"c28ce02d291445dda287ed54d23e034a802590cb45acde2034a245be8041b336","tests/fuse.rs":"f5f6be250155d171c53c0de3f7091591f12fcb021c34a282b1ed47ffd07f699f","tests/future_obj.rs":"f454224790be4b56bc20b283731d2e6e0418a8728f7b89ed8cc16268d171a1b4","tests/futures_ordered.rs":"afd068e3438260f7caba1f6acb7980389d66b663d59b48c9f1222da0eef284be","tests/futures_unordered.rs":"2ae03a3b1d7d9ffac29405087409ad3485e6e83775a5d6aeda7ef51dc8a83cff","tests/inspect.rs":"286172b37e5c4806932956ff2a4f44a447a4760cd935db9d7c0e788659ffaacc","tests/io_read_exact.rs":"1f15089ce1ec39fa1fd9ba29514d6fa8a8365a1018c457ac6df66f95c84e2c95","tests/join_all.rs":"0ea33e2f1c6e9725c2a5d06f59e5b8e022dd7c4f2f6244997897d10f4ab775a7","tests/oneshot.rs":"792cf3f6397485c42a31c41b013d99b6705f58e4e9b9790be5674e8171908808","tests/recurse.rs":"7eba6f74ea4cdc16153cff0d537f9f6fe07a9c1e00b7714fad8b71e7be6412e2","tests/shared.rs":"42eeaeaae3d7b17e167214a722370e3210bb0b522652c9abeb0123caada33ce3","tests/split.rs":"d085a3faee549125b0a99520938a1b184fc80553a90b24a63d6486d7afe247a7","tests/unfold.rs":"736a8805dbb950adfa7d9e2ad4bf2ad7c2a30eb7def3d2764ce19005d892d798","tests_disabled/all.rs":"038e4dc5b6a3585437a20ef3218bcc3f1010d59395d261ab0a71ecc2530fb348","tests_disabled/async_await/elisions.rs":"629be3760ef4e40365572f7dff19770b084171eae25019b88c4c2e5280fb189d","tests_disabled/async_await/mod.rs":"b821c40b8a01df25b577dedc76a4c0fab7e3026f2e0f666a33853fb10fb082c8","tests_disabled/async_await/pinned.rs":"c2e32cdd004032457e0b889f0e61ee5d1719603208c14bc99d0d89a126e1dd7d","tests_disabled/async_await/smoke.rs":"baf44520e8e9e39a1093e1769fdce0ebf4e5afcc4abf75f03f072a597b19734c","tests_disabled/async_await_tests.rs":"aa3a3353c285a812c038fbc08404e7b8fdf68d3355fd109adb52047c1e9aa69e","tests_disabled/buffer_unordered.rs":"ad2b1a78b16bd87e412d25d3e387c7cc4495e585619d35c5a2b7087dac376922","tests_disabled/eventual.rs":"fd2456c07be6372e5f35a56db9e5a54eab844dae27c03e86772a8203a2184a76","tests_disabled/future_flatten_stream.rs":"f3a26f059a6a6b3544ec15e9d26b53e066554c468eb90566a44be2cd3e30c07d","tests_disabled/ready_queue.rs":"eb065aeb70005eca9c117956c9a1158245d7fc7e569cb6390a8049b97011faf8","tests_disabled/select_all.rs":"77dac9d9609f76abfa1078c74cd4643fad2e379f1de43abe46e13e54e8ec20ea","tests_disabled/select_ok.rs":"2fb035c4880ef4851a12e826ca05b9caad4eadc4b50df88a42ea5f66344d5041","tests_disabled/sink.rs":"5e48bc306bbd582a6e2caebf24c4ff5fb68ce6874628c5a30d73afd79baa37e6","tests_disabled/stream.rs":"f41e9e0264f3a4e60a37a4f4fba7c3ed73261ef305dfcea91810da7c4f1cfae1","tests_disabled/stream_catch_unwind.rs":"a0a41d07f1caf9544e830ac7e5dcfb991c99fdb997b855cb288de74f25c7e1f3","tests_disabled/stream_select_all.rs":"3caf33401e9dbb69dbbc3a6b701fb495bffaccbf3e854fa5a5346a61bb11e193"},"package":"7e3846197ff6a2f25e306fea0f98b22b03c0c2d0121ff48c10dbb9a923833d64"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-preview/Cargo.toml b/rustc_deps/vendor/futures-preview/Cargo.toml
index 30041bf..65ac3ed 100644
--- a/rustc_deps/vendor/futures-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-preview/Cargo.toml
@@ -13,11 +13,11 @@
 [package]
 edition = "2018"
 name = "futures-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "An implementation of futures and streams featuring zero allocations,\ncomposability, and iterator-like interfaces.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures"
 readme = "../README.md"
 keywords = ["futures", "async", "future"]
 categories = ["asynchronous"]
@@ -27,27 +27,27 @@
 [lib]
 name = "futures"
 [dependencies.futures-channel-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.futures-core-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.futures-executor-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.futures-io-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.futures-sink-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.futures-util-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [features]
diff --git a/rustc_deps/vendor/futures-preview/src/lib.rs b/rustc_deps/vendor/futures-preview/src/lib.rs
index dbae48f..b7c508c 100644
--- a/rustc_deps/vendor/futures-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-preview/src/lib.rs
@@ -21,14 +21,14 @@
 //! streams and sinks, and then spawned as independent tasks that are run to
 //! completion, but *do not block* the thread running them.
 
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 #![cfg_attr(not(feature = "std"), no_std)]
 
 #![warn(missing_docs, missing_debug_implementations)]
 #![deny(bare_trait_objects)]
 
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures")]
 
 #![cfg_attr(feature = "nightly", feature(cfg_target_has_atomic))]
 
@@ -57,7 +57,7 @@
 #[cfg(feature = "std")]
 pub use futures_util::{
     // Async-await
-    join, try_join, select, pending, poll,
+    join, try_join, pending, poll,
 };
 
 #[cfg(feature = "std")]
@@ -114,7 +114,7 @@
     //! can then spawn further tasks back onto the pool to complete its work:
     //!
     //! ```
-    //! #![feature(pin, arbitrary_self_types, futures_api)]
+    //! #![feature(futures_api)]
     //! use futures::executor::ThreadPool;
     //! # use futures::future::{Future, lazy};
     //! # let my_app = lazy(|_| 42);
@@ -199,7 +199,9 @@
         // For FutureExt:
         CatchUnwind, Shared,
 
-        // ToDo: JoinAll, SelectAll, SelectOk, join_all, select_all, select_ok
+        join_all, JoinAll,
+
+        // ToDo: SelectAll, SelectOk, select_all, select_ok
     };
 
     pub use futures_util::try_future::{
@@ -328,7 +330,7 @@
         BufferUnordered, Buffered, CatchUnwind, Chunks, Collect, SplitStream,
         SplitSink, ReuniteError,
 
-        // ToDo: select_all, SelectAll,
+        select_all, SelectAll,
     };
 
     pub use futures_util::try_stream::{
@@ -384,3 +386,28 @@
     )]
     pub use futures_util::task::AtomicWaker;
 }
+
+// `select!` re-export --------------------------------------
+
+#[cfg(feature = "std")]
+#[doc(hidden)]
+pub use futures_util::rand_reexport;
+
+#[cfg(feature = "std")]
+#[doc(hidden)]
+pub mod inner_select {
+    pub use futures_util::select;
+}
+
+#[cfg(feature = "std")]
+futures_util::document_select_macro! {
+    #[macro_export]
+    macro_rules! select { // replace `::futures_util` with `::futures` as the crate path
+        ($($tokens:tt)*) => {
+            $crate::inner_select::select! {
+                futures_crate_path ( ::futures )
+                $( $tokens )*
+            }
+        }
+    }
+}
diff --git a/rustc_deps/vendor/futures-preview/tests/abortable.rs b/rustc_deps/vendor/futures-preview/tests/abortable.rs
index 8738331..6b83cb2 100644
--- a/rustc_deps/vendor/futures-preview/tests/abortable.rs
+++ b/rustc_deps/vendor/futures-preview/tests/abortable.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::channel::oneshot;
 use futures::executor::block_on;
diff --git a/rustc_deps/vendor/futures-preview/tests/async_await_macros.rs b/rustc_deps/vendor/futures-preview/tests/async_await_macros.rs
index 71ee9d3..2f4acc8 100644
--- a/rustc_deps/vendor/futures-preview/tests/async_await_macros.rs
+++ b/rustc_deps/vendor/futures-preview/tests/async_await_macros.rs
@@ -1,5 +1,5 @@
 #![recursion_limit="128"]
-#![feature(async_await, await_macro, pin, arbitrary_self_types, futures_api)]
+#![feature(async_await, await_macro, futures_api)]
 
 use futures::{Poll, pending, poll, join, try_join, select};
 use futures::channel::{mpsc, oneshot};
diff --git a/rustc_deps/vendor/futures-preview/tests/basic_combinators.rs b/rustc_deps/vendor/futures-preview/tests/basic_combinators.rs
index e370a05..66ac542 100644
--- a/rustc_deps/vendor/futures-preview/tests/basic_combinators.rs
+++ b/rustc_deps/vendor/futures-preview/tests/basic_combinators.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::future::{self, FutureExt, TryFutureExt};
 use futures_test::future::FutureTestExt;
diff --git a/rustc_deps/vendor/futures-preview/tests/eager_drop.rs b/rustc_deps/vendor/futures-preview/tests/eager_drop.rs
index 13e7cb2..891b965 100644
--- a/rustc_deps/vendor/futures-preview/tests/eager_drop.rs
+++ b/rustc_deps/vendor/futures-preview/tests/eager_drop.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::channel::oneshot;
 use futures::future::{self, Future, FutureExt, TryFutureExt};
@@ -56,7 +56,7 @@
 impl<F: Future, T: Send + 'static> Future for FutureData<F, T> {
     type Output = F::Output;
 
-    fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<F::Output> {
+    fn poll(self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<F::Output> {
         self.future().poll(lw)
     }
 }
diff --git a/rustc_deps/vendor/futures-preview/tests/fuse.rs b/rustc_deps/vendor/futures-preview/tests/fuse.rs
index ceacdd8..dd679b3 100644
--- a/rustc_deps/vendor/futures-preview/tests/fuse.rs
+++ b/rustc_deps/vendor/futures-preview/tests/fuse.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::future::{self, FutureExt};
 use futures_test::task::panic_local_waker;
diff --git a/rustc_deps/vendor/futures-preview/tests/future_obj.rs b/rustc_deps/vendor/futures-preview/tests/future_obj.rs
index 3eb47c5..433d5c2 100644
--- a/rustc_deps/vendor/futures-preview/tests/future_obj.rs
+++ b/rustc_deps/vendor/futures-preview/tests/future_obj.rs
@@ -1,4 +1,4 @@
-#![feature(pin, async_await, arbitrary_self_types, futures_api)]
+#![feature(async_await, futures_api)]
 
 use futures::future::{Future, FutureExt, FutureObj};
 use std::pin::Pin;
diff --git a/rustc_deps/vendor/futures-preview/tests/futures_ordered.rs b/rustc_deps/vendor/futures-preview/tests/futures_ordered.rs
index e5e34d8..e03beae 100644
--- a/rustc_deps/vendor/futures-preview/tests/futures_ordered.rs
+++ b/rustc_deps/vendor/futures-preview/tests/futures_ordered.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::channel::oneshot;
 use futures::executor::{block_on, block_on_stream};
diff --git a/rustc_deps/vendor/futures-preview/tests/futures_unordered.rs b/rustc_deps/vendor/futures-preview/tests/futures_unordered.rs
index cad6f34..f6522ae 100644
--- a/rustc_deps/vendor/futures-preview/tests/futures_unordered.rs
+++ b/rustc_deps/vendor/futures-preview/tests/futures_unordered.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::channel::oneshot;
 use futures::executor::{block_on, block_on_stream};
diff --git a/rustc_deps/vendor/futures-preview/tests/inspect.rs b/rustc_deps/vendor/futures-preview/tests/inspect.rs
index 8e13868..00b4356 100644
--- a/rustc_deps/vendor/futures-preview/tests/inspect.rs
+++ b/rustc_deps/vendor/futures-preview/tests/inspect.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::executor::block_on;
 use futures::future::{self, FutureExt};
diff --git a/rustc_deps/vendor/futures-preview/tests/io_read_exact.rs b/rustc_deps/vendor/futures-preview/tests/io_read_exact.rs
index a957736..7f6b103 100644
--- a/rustc_deps/vendor/futures-preview/tests/io_read_exact.rs
+++ b/rustc_deps/vendor/futures-preview/tests/io_read_exact.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::executor::block_on;
 use futures::io::AsyncReadExt;
diff --git a/rustc_deps/vendor/futures-preview/tests/join_all.rs b/rustc_deps/vendor/futures-preview/tests/join_all.rs
index 7bd77ee..6502536 100644
--- a/rustc_deps/vendor/futures-preview/tests/join_all.rs
+++ b/rustc_deps/vendor/futures-preview/tests/join_all.rs
@@ -1,4 +1,4 @@
-#![feature(async_await, pin, arbitrary_self_types, futures_api)]
+#![feature(async_await, futures_api)]
 
 extern crate futures_util;
 extern crate futures;
@@ -7,7 +7,7 @@
 use std::future::Future;
 use futures::executor::block_on;
 use std::fmt::Debug;
-use std::pin::Unpin;
+use std::marker::Unpin;
 
 fn assert_done<T: PartialEq + Debug, F: FnOnce() -> Box<Future<Output=T> + Unpin>>(actual_fut: F, expected: T) {
     let output = block_on(actual_fut());
diff --git a/rustc_deps/vendor/futures-preview/tests/oneshot.rs b/rustc_deps/vendor/futures-preview/tests/oneshot.rs
index 956680f..38e79a2 100644
--- a/rustc_deps/vendor/futures-preview/tests/oneshot.rs
+++ b/rustc_deps/vendor/futures-preview/tests/oneshot.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::channel::oneshot;
 use futures::future::{FutureExt, TryFutureExt};
diff --git a/rustc_deps/vendor/futures-preview/tests/recurse.rs b/rustc_deps/vendor/futures-preview/tests/recurse.rs
index e3bb633..051ab8c 100644
--- a/rustc_deps/vendor/futures-preview/tests/recurse.rs
+++ b/rustc_deps/vendor/futures-preview/tests/recurse.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::executor::block_on;
 use futures::future::{self, FutureExt, FutureObj};
diff --git a/rustc_deps/vendor/futures-preview/tests/shared.rs b/rustc_deps/vendor/futures-preview/tests/shared.rs
index 6d96707..5f7565e 100644
--- a/rustc_deps/vendor/futures-preview/tests/shared.rs
+++ b/rustc_deps/vendor/futures-preview/tests/shared.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::channel::oneshot;
 use futures::executor::{block_on, LocalPool};
diff --git a/rustc_deps/vendor/futures-preview/tests/split.rs b/rustc_deps/vendor/futures-preview/tests/split.rs
index bcbf492..3ff77db 100644
--- a/rustc_deps/vendor/futures-preview/tests/split.rs
+++ b/rustc_deps/vendor/futures-preview/tests/split.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::executor::block_on;
 use futures::sink::{Sink, SinkExt};
@@ -21,7 +21,7 @@
     type Item = T::Item;
 
     fn poll_next(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<T::Item>> {
         self.stream().poll_next(lw)
@@ -33,28 +33,28 @@
     type SinkError = U::SinkError;
 
     fn poll_ready(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
         self.sink().poll_ready(lw)
     }
 
     fn start_send(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         item: Self::SinkItem,
     ) -> Result<(), Self::SinkError> {
         self.sink().start_send(item)
     }
 
     fn poll_flush(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
         self.sink().poll_flush(lw)
     }
 
     fn poll_close(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
         self.sink().poll_close(lw)
diff --git a/rustc_deps/vendor/futures-preview/tests/unfold.rs b/rustc_deps/vendor/futures-preview/tests/unfold.rs
index 7d5719f..cd8819c 100644
--- a/rustc_deps/vendor/futures-preview/tests/unfold.rs
+++ b/rustc_deps/vendor/futures-preview/tests/unfold.rs
@@ -1,4 +1,4 @@
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures::future;
 use futures::stream;
diff --git a/rustc_deps/vendor/futures-preview/tests_disabled/async_await_tests.rs b/rustc_deps/vendor/futures-preview/tests_disabled/async_await_tests.rs
index 81a50a7..b3d59f5 100644
--- a/rustc_deps/vendor/futures-preview/tests_disabled/async_await_tests.rs
+++ b/rustc_deps/vendor/futures-preview/tests_disabled/async_await_tests.rs
@@ -1,4 +1,4 @@
-#![cfg_attr(feature = "nightly", feature(proc_macro, generators, pin))]
+#![cfg_attr(feature = "nightly", feature(proc_macro, generators))]
 
 #[cfg(feature = "nightly")]
 mod async_await;
diff --git a/rustc_deps/vendor/futures-select-macro-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-select-macro-preview/.cargo-checksum.json
new file mode 100644
index 0000000..411489f
--- /dev/null
+++ b/rustc_deps/vendor/futures-select-macro-preview/.cargo-checksum.json
@@ -0,0 +1 @@
+{"files":{"Cargo.toml":"e7990b5f12fcb515906f1e8bb1bc3edc030a7cd4093c911ab2569d9f9c1495de","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/lib.rs":"f083ce23bdf002c269dc0766e21b2d84ae65e135254072efff1a10a10de9bbb6"},"package":"d9ef6081511aaf8f16804046829d0d3126bae9ba51c4837eea1c53f432dbfa25"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-select-macro-preview/Cargo.toml b/rustc_deps/vendor/futures-select-macro-preview/Cargo.toml
new file mode 100644
index 0000000..cdecf51
--- /dev/null
+++ b/rustc_deps/vendor/futures-select-macro-preview/Cargo.toml
@@ -0,0 +1,41 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g. crates.io) dependencies
+#
+# If you believe there's an error in this file please file an
+# issue against the rust-lang/cargo repository. If you're
+# editing this file be aware that the upstream Cargo.toml
+# will likely look very different (and much more reasonable)
+
+[package]
+edition = "2018"
+name = "futures-select-macro-preview"
+version = "0.3.0-alpha.11"
+authors = ["Taylor Cramer <cramertj@google.com>"]
+description = "The `select!` macro for waiting on multiple different `Future`s at once and handling the first one to complete.\n"
+homepage = "https://rust-lang-nursery.github.io/futures-rs"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_select"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-lang-nursery/futures-rs"
+
+[lib]
+name = "futures_select_macro"
+proc-macro = true
+[dependencies.proc-macro-hack]
+version = "0.5.3"
+
+[dependencies.proc-macro2]
+version = "0.4"
+
+[dependencies.quote]
+version = "0.6"
+
+[dependencies.syn]
+version = "0.15.22"
+features = ["full"]
+
+[features]
+std = []
diff --git a/rustc_deps/vendor/futures-select-macro-preview/LICENSE-APACHE b/rustc_deps/vendor/futures-select-macro-preview/LICENSE-APACHE
new file mode 100644
index 0000000..9eb0b09
--- /dev/null
+++ b/rustc_deps/vendor/futures-select-macro-preview/LICENSE-APACHE
@@ -0,0 +1,202 @@
+                              Apache License
+                        Version 2.0, January 2004
+                     http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+   "License" shall mean the terms and conditions for use, reproduction,
+   and distribution as defined by Sections 1 through 9 of this document.
+
+   "Licensor" shall mean the copyright owner or entity authorized by
+   the copyright owner that is granting the License.
+
+   "Legal Entity" shall mean the union of the acting entity and all
+   other entities that control, are controlled by, or are under common
+   control with that entity. For the purposes of this definition,
+   "control" means (i) the power, direct or indirect, to cause the
+   direction or management of such entity, whether by contract or
+   otherwise, or (ii) ownership of fifty percent (50%) or more of the
+   outstanding shares, or (iii) beneficial ownership of such entity.
+
+   "You" (or "Your") shall mean an individual or Legal Entity
+   exercising permissions granted by this License.
+
+   "Source" form shall mean the preferred form for making modifications,
+   including but not limited to software source code, documentation
+   source, and configuration files.
+
+   "Object" form shall mean any form resulting from mechanical
+   transformation or translation of a Source form, including but
+   not limited to compiled object code, generated documentation,
+   and conversions to other media types.
+
+   "Work" shall mean the work of authorship, whether in Source or
+   Object form, made available under the License, as indicated by a
+   copyright notice that is included in or attached to the work
+   (an example is provided in the Appendix below).
+
+   "Derivative Works" shall mean any work, whether in Source or Object
+   form, that is based on (or derived from) the Work and for which the
+   editorial revisions, annotations, elaborations, or other modifications
+   represent, as a whole, an original work of authorship. For the purposes
+   of this License, Derivative Works shall not include works that remain
+   separable from, or merely link (or bind by name) to the interfaces of,
+   the Work and Derivative Works thereof.
+
+   "Contribution" shall mean any work of authorship, including
+   the original version of the Work and any modifications or additions
+   to that Work or Derivative Works thereof, that is intentionally
+   submitted to Licensor for inclusion in the Work by the copyright owner
+   or by an individual or Legal Entity authorized to submit on behalf of
+   the copyright owner. For the purposes of this definition, "submitted"
+   means any form of electronic, verbal, or written communication sent
+   to the Licensor or its representatives, including but not limited to
+   communication on electronic mailing lists, source code control systems,
+   and issue tracking systems that are managed by, or on behalf of, the
+   Licensor for the purpose of discussing and improving the Work, but
+   excluding communication that is conspicuously marked or otherwise
+   designated in writing by the copyright owner as "Not a Contribution."
+
+   "Contributor" shall mean Licensor and any individual or Legal Entity
+   on behalf of whom a Contribution has been received by Licensor and
+   subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   copyright license to reproduce, prepare Derivative Works of,
+   publicly display, publicly perform, sublicense, and distribute the
+   Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   (except as stated in this section) patent license to make, have made,
+   use, offer to sell, sell, import, and otherwise transfer the Work,
+   where such license applies only to those patent claims licensable
+   by such Contributor that are necessarily infringed by their
+   Contribution(s) alone or by combination of their Contribution(s)
+   with the Work to which such Contribution(s) was submitted. If You
+   institute patent litigation against any entity (including a
+   cross-claim or counterclaim in a lawsuit) alleging that the Work
+   or a Contribution incorporated within the Work constitutes direct
+   or contributory patent infringement, then any patent licenses
+   granted to You under this License for that Work shall terminate
+   as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+   Work or Derivative Works thereof in any medium, with or without
+   modifications, and in Source or Object form, provided that You
+   meet the following conditions:
+
+   (a) You must give any other recipients of the Work or
+       Derivative Works a copy of this License; and
+
+   (b) You must cause any modified files to carry prominent notices
+       stating that You changed the files; and
+
+   (c) You must retain, in the Source form of any Derivative Works
+       that You distribute, all copyright, patent, trademark, and
+       attribution notices from the Source form of the Work,
+       excluding those notices that do not pertain to any part of
+       the Derivative Works; and
+
+   (d) If the Work includes a "NOTICE" text file as part of its
+       distribution, then any Derivative Works that You distribute must
+       include a readable copy of the attribution notices contained
+       within such NOTICE file, excluding those notices that do not
+       pertain to any part of the Derivative Works, in at least one
+       of the following places: within a NOTICE text file distributed
+       as part of the Derivative Works; within the Source form or
+       documentation, if provided along with the Derivative Works; or,
+       within a display generated by the Derivative Works, if and
+       wherever such third-party notices normally appear. The contents
+       of the NOTICE file are for informational purposes only and
+       do not modify the License. You may add Your own attribution
+       notices within Derivative Works that You distribute, alongside
+       or as an addendum to the NOTICE text from the Work, provided
+       that such additional attribution notices cannot be construed
+       as modifying the License.
+
+   You may add Your own copyright statement to Your modifications and
+   may provide additional or different license terms and conditions
+   for use, reproduction, or distribution of Your modifications, or
+   for any such Derivative Works as a whole, provided Your use,
+   reproduction, and distribution of the Work otherwise complies with
+   the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+   any Contribution intentionally submitted for inclusion in the Work
+   by You to the Licensor shall be under the terms and conditions of
+   this License, without any additional terms or conditions.
+   Notwithstanding the above, nothing herein shall supersede or modify
+   the terms of any separate license agreement you may have executed
+   with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+   names, trademarks, service marks, or product names of the Licensor,
+   except as required for reasonable and customary use in describing the
+   origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+   agreed to in writing, Licensor provides the Work (and each
+   Contributor provides its Contributions) on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+   implied, including, without limitation, any warranties or conditions
+   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+   PARTICULAR PURPOSE. You are solely responsible for determining the
+   appropriateness of using or redistributing the Work and assume any
+   risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+   whether in tort (including negligence), contract, or otherwise,
+   unless required by applicable law (such as deliberate and grossly
+   negligent acts) or agreed to in writing, shall any Contributor be
+   liable to You for damages, including any direct, indirect, special,
+   incidental, or consequential damages of any character arising as a
+   result of this License or out of the use or inability to use the
+   Work (including but not limited to damages for loss of goodwill,
+   work stoppage, computer failure or malfunction, or any and all
+   other commercial damages or losses), even if such Contributor
+   has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+   the Work or Derivative Works thereof, You may choose to offer,
+   and charge a fee for, acceptance of support, warranty, indemnity,
+   or other liability obligations and/or rights consistent with this
+   License. However, in accepting such obligations, You may act only
+   on Your own behalf and on Your sole responsibility, not on behalf
+   of any other Contributor, and only if You agree to indemnify,
+   defend, and hold each Contributor harmless for any liability
+   incurred by, or claims asserted against, such Contributor by reason
+   of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+   To apply the Apache License to your work, attach the following
+   boilerplate notice, with the fields enclosed by brackets "[]"
+   replaced with your own identifying information. (Don't include
+   the brackets!)  The text should be enclosed in the appropriate
+   comment syntax for the file format. We also recommend that a
+   file or class name and description of purpose be included on the
+   same "printed page" as the copyright notice for easier
+   identification within third-party archives.
+
+Copyright (c) 2016 Alex Crichton
+Copyright (c) 2017 The Tokio Authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+	http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/rustc_deps/vendor/futures-select-macro-preview/LICENSE-MIT b/rustc_deps/vendor/futures-select-macro-preview/LICENSE-MIT
new file mode 100644
index 0000000..8ad082e
--- /dev/null
+++ b/rustc_deps/vendor/futures-select-macro-preview/LICENSE-MIT
@@ -0,0 +1,26 @@
+Copyright (c) 2016 Alex Crichton
+Copyright (c) 2017 The Tokio Authors
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/rustc_deps/vendor/futures-select-macro-preview/src/lib.rs b/rustc_deps/vendor/futures-select-macro-preview/src/lib.rs
new file mode 100644
index 0000000..93bd55d
--- /dev/null
+++ b/rustc_deps/vendor/futures-select-macro-preview/src/lib.rs
@@ -0,0 +1,289 @@
+//! The futures-rs `select! macro implementation.
+
+#![recursion_limit="128"]
+
+extern crate proc_macro;
+
+use proc_macro::TokenStream;
+use proc_macro2::Span;
+use proc_macro_hack::proc_macro_hack;
+use quote::quote;
+use syn::{parenthesized, parse_quote, Expr, Ident, Pat, Token};
+use syn::parse::{Parse, ParseStream};
+
+mod kw {
+    syn::custom_keyword!(complete);
+    syn::custom_keyword!(futures_crate_path);
+}
+
+struct Select {
+    futures_crate_path: Option<syn::Path>,
+    // span of `complete`, then expression after `=> ...`
+    complete: Option<Expr>,
+    default: Option<Expr>,
+    normal_fut_exprs: Vec<Expr>,
+    normal_fut_handlers: Vec<(Pat, Expr)>,
+}
+
+#[allow(clippy::large_enum_variant)]
+enum CaseKind {
+    Complete,
+    Default,
+    Normal(Pat, Expr),
+}
+
+impl Parse for Select {
+    fn parse(input: ParseStream) -> syn::Result<Self> {
+        let mut select = Select {
+            futures_crate_path: None,
+            complete: None,
+            default: None,
+            normal_fut_exprs: vec![],
+            normal_fut_handlers: vec![],
+        };
+
+        // When `futures_crate_path(::path::to::futures::lib)` is provided,
+        // it sets the path through which futures library functions will be
+        // accessed.
+        if input.peek(kw::futures_crate_path) {
+            input.parse::<kw::futures_crate_path>()?;
+            let content;
+            parenthesized!(content in input);
+            select.futures_crate_path = Some(content.parse()?);
+        }
+
+        while !input.is_empty() {
+            let case_kind = if input.peek(kw::complete) {
+                // `complete`
+                if select.complete.is_some() {
+                    return Err(input.error("multiple `complete` cases found, only one allowed"));
+                }
+                input.parse::<kw::complete>()?;
+                CaseKind::Complete
+            } else if input.peek(Token![default]) {
+                // `default`
+                if select.default.is_some() {
+                    return Err(input.error("multiple `default` cases found, only one allowed"));
+                }
+                input.parse::<Ident>()?;
+                CaseKind::Default
+            } else {
+                // `<pat> = <expr>`
+                let pat = input.parse()?;
+                input.parse::<Token![=]>()?;
+                let expr = input.parse()?;
+                CaseKind::Normal(pat, expr)
+            };
+
+            // `=> <expr>`
+            input.parse::<Token![=>]>()?;
+            let expr = input.parse::<Expr>()?;
+
+            // Commas after the expression are only optional if it's a `Block`
+            // or it is the last branch in the `match`.
+            let is_block = match expr { Expr::Block(_) => true, _ => false };
+            if is_block || input.is_empty() {
+                input.parse::<Option<Token![,]>>()?;
+            } else {
+                input.parse::<Token![,]>()?;
+            }
+
+            match case_kind {
+                CaseKind::Complete => select.complete = Some(expr),
+                CaseKind::Default => select.default = Some(expr),
+                CaseKind::Normal(pat, fut_expr) => {
+                    select.normal_fut_exprs.push(fut_expr);
+                    select.normal_fut_handlers.push((pat, expr));
+                },
+            }
+        }
+
+        Ok(select)
+    }
+}
+
+// Enum over all the cases in which the `select!` waiting has completed and the result
+// can be processed.
+//
+// `enum __PrivResult<_1, _2, ...> { _1(_1), _2(_2), ..., Complete }`
+fn declare_result_enum(
+    result_ident: Ident,
+    variants: usize,
+    complete: bool,
+    span: Span
+) -> (Vec<Ident>, syn::ItemEnum) {
+    // "_0", "_1", "_2"
+    let variant_names: Vec<Ident> =
+        (0..variants)
+            .map(|num| Ident::new(&format!("_{}", num), span))
+            .collect();
+
+    let type_parameters = &variant_names;
+    let variants = &variant_names;
+
+    let complete_variant = if complete {
+        Some(quote!(Complete))
+    } else {
+        None
+    };
+
+    let enum_item = parse_quote! {
+        enum #result_ident<#(#type_parameters,)*> {
+            #(
+                #variants(#type_parameters),
+            )*
+            #complete_variant
+        }
+    };
+
+    (variant_names, enum_item)
+}
+
+/// The `select!` macro.
+#[proc_macro_hack]
+pub fn select(input: TokenStream) -> TokenStream {
+    let parsed = syn::parse_macro_input!(input as Select);
+
+    let futures_crate: syn::Path = parsed.futures_crate_path.unwrap_or_else(|| parse_quote!(::futures_util));
+    let rand_crate: syn::Path = parse_quote!(#futures_crate::rand_reexport);
+
+    // should be def_site, but that's unstable
+    let span = Span::call_site();
+
+    let enum_ident = Ident::new("__PrivResult", span);
+
+    let (variant_names, enum_item) = declare_result_enum(
+        enum_ident.clone(),
+        parsed.normal_fut_exprs.len(),
+        parsed.complete.is_some(),
+        span,
+    );
+
+    // bind non-`Ident` future exprs w/ `let`
+    let mut future_let_bindings = Vec::with_capacity(parsed.normal_fut_exprs.len());
+    let bound_future_names: Vec<_> = parsed.normal_fut_exprs.into_iter()
+        .zip(variant_names.iter())
+        .map(|(expr, variant_name)| {
+            match expr {
+                // Don't bind futures that are already a path.
+                // This prevents creating redundant stack space
+                // for them.
+                syn::Expr::Path(path) => path,
+                _ => {
+                    future_let_bindings.push(quote! {
+                        let mut #variant_name = #expr;
+                    });
+                    parse_quote! { #variant_name }
+                }
+            }
+        })
+        .collect();
+
+    // For each future, make an `&mut dyn FnMut(&LocalWaker) -> Option<Poll<__PrivResult<...>>`
+    // to use for polling that individual future. These will then be put in an array.
+    let poll_functions = bound_future_names.iter().zip(variant_names.iter())
+        .map(|(bound_future_name, variant_name)| {
+            quote! {
+                let mut #variant_name = |__lw: &_| {
+                    if #futures_crate::future::FusedFuture::is_terminated(&#bound_future_name) {
+                        None
+                    } else {
+                        Some(#futures_crate::future::FutureExt::poll_unpin(
+                            &mut #bound_future_name,
+                            __lw,
+                        ).map(#enum_ident::#variant_name))
+                    }
+                };
+                let #variant_name: &mut dyn FnMut(
+                    &#futures_crate::task::LocalWaker
+                ) -> Option<#futures_crate::task::Poll<_>> = &mut #variant_name;
+            }
+        });
+
+    let none_polled = if parsed.complete.is_some() {
+        quote! {
+            #futures_crate::task::Poll::Ready(#enum_ident::Complete)
+        }
+    } else {
+        quote! {
+            panic!("all futures in select! were completed,\
+                    but no `complete =>` handler was provided")
+        }
+    };
+
+    let branches = parsed.normal_fut_handlers.into_iter()
+        .zip(variant_names.iter())
+        .map(|((pat, expr), variant_name)| {
+            quote! {
+                #enum_ident::#variant_name(#pat) => { #expr },
+            }
+        });
+    let branches = quote! { #( #branches )* };
+
+    let complete_branch = parsed.complete.map(|complete_expr| {
+        quote! {
+            #enum_ident::Complete => { #complete_expr },
+        }
+    });
+
+    let branches = quote! {
+        #branches
+        #complete_branch
+    };
+
+    let await_and_select = if let Some(default_expr) = parsed.default {
+        quote! {
+            if let #futures_crate::task::Poll::Ready(x) =
+                __poll_fn(#futures_crate::task::noop_local_waker_ref())
+            {
+                match x { #branches }
+            } else {
+                #default_expr
+            };
+        }
+    } else {
+        quote! {
+            match r#await!(#futures_crate::future::poll_fn(__poll_fn)) {
+                #branches
+            }
+        }
+    };
+
+    TokenStream::from(quote! { {
+        #enum_item
+        #( #future_let_bindings )*
+
+        let mut __poll_fn = |__lw: &#futures_crate::task::LocalWaker| {
+            let mut __any_polled = false;
+
+            #( #poll_functions )*
+
+            let mut __select_arr = [#( #variant_names ),*];
+            #rand_crate::Rng::shuffle(
+                &mut #rand_crate::thread_rng(),
+                &mut __select_arr,
+            );
+            for poller in &mut __select_arr {
+                let poller: &mut &mut dyn FnMut(
+                    &#futures_crate::task::LocalWaker
+                ) -> Option<#futures_crate::task::Poll<_>> = poller;
+                match poller(__lw) {
+                    Some(x @ #futures_crate::task::Poll::Ready(_)) =>
+                        return x,
+                    Some(#futures_crate::task::Poll::Pending) => {
+                        __any_polled = true;
+                    }
+                    None => {}
+                }
+            }
+
+            if !__any_polled {
+                #none_polled
+            } else {
+                #futures_crate::task::Poll::Pending
+            }
+        };
+
+        #await_and_select
+    } })
+}
diff --git a/rustc_deps/vendor/futures-sink-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-sink-preview/.cargo-checksum.json
index 1245ee7..24ed0ee 100644
--- a/rustc_deps/vendor/futures-sink-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-sink-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"ce1e1ee5af2cc5d5648b21bfb6ffd6a000e213cb411206ddb229da9ada69bbcf","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/channel_impls.rs":"eea5cdf5da95c694fe95cc3809a5153ae6c926b2b54582ee7d2e2bdeb2d5ce4c","src/lib.rs":"11ff5bb03600d188a524712882855f29bb24fbd3f820e7e82cfd931686da323b"},"package":"9f5b158f37d752cc964f65f1dc9694d39c38faacc1ecf70846b0e7a94bdadc08"}
\ No newline at end of file
+{"files":{"Cargo.toml":"1eb59798d26f2cda9a417e827139ee5aa1b41d9e3ebb635da0f59bda133ee43f","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","src/channel_impls.rs":"eea5cdf5da95c694fe95cc3809a5153ae6c926b2b54582ee7d2e2bdeb2d5ce4c","src/lib.rs":"e30a1238ffe138f5b0b1b3a4186e70c89c6127871d1d3090b728fd68d282beab"},"package":"113c745dcea4f505a8b137160eb6777c785bc979e32cb6971443af356c09b373"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-sink-preview/Cargo.toml b/rustc_deps/vendor/futures-sink-preview/Cargo.toml
index c430a9d..fea0f7c 100644
--- a/rustc_deps/vendor/futures-sink-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-sink-preview/Cargo.toml
@@ -13,11 +13,11 @@
 [package]
 edition = "2018"
 name = "futures-sink-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "The asynchronous `Sink` trait for the futures-rs library.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures_sink"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_sink"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang-nursery/futures-rs"
 
@@ -29,11 +29,11 @@
 default-features = false
 
 [dependencies.futures-channel-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.futures-core-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [features]
diff --git a/rustc_deps/vendor/futures-sink-preview/src/lib.rs b/rustc_deps/vendor/futures-sink-preview/src/lib.rs
index 33c5643..50274f8 100644
--- a/rustc_deps/vendor/futures-sink-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-sink-preview/src/lib.rs
@@ -5,9 +5,9 @@
 
 #![cfg_attr(not(feature = "std"), no_std)]
 #![warn(missing_docs, missing_debug_implementations)]
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures_sink")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_sink")]
 
-#![feature(pin, arbitrary_self_types, futures_api)]
+#![feature(futures_api)]
 
 use futures_core::task::{LocalWaker, Poll};
 use core::marker::Unpin;
@@ -174,7 +174,7 @@
 
         fn start_send(self: Pin<&mut Self>, item: Self::SinkItem) -> Result<(), Self::SinkError> {
             // TODO: impl<T> Unpin for Vec<T> {}
-            unsafe { Pin::get_mut_unchecked(self) }.push(item);
+            unsafe { Pin::get_unchecked_mut(self) }.push(item);
             Ok(())
         }
 
@@ -197,7 +197,7 @@
 
         fn start_send(self: Pin<&mut Self>, item: Self::SinkItem) -> Result<(), Self::SinkError> {
             // TODO: impl<T> Unpin for Vec<T> {}
-            unsafe { Pin::get_mut_unchecked(self) }.push_back(item);
+            unsafe { Pin::get_unchecked_mut(self) }.push_back(item);
             Ok(())
         }
 
@@ -248,7 +248,7 @@
 
     fn poll_ready(self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Result<(), Self::SinkError>> {
         unsafe {
-            match Pin::get_mut_unchecked(self) {
+            match Pin::get_unchecked_mut(self) {
                 Either::Left(x) => Pin::new_unchecked(x).poll_ready(lw),
                 Either::Right(x) => Pin::new_unchecked(x).poll_ready(lw),
             }
@@ -257,7 +257,7 @@
 
     fn start_send(self: Pin<&mut Self>, item: Self::SinkItem) -> Result<(), Self::SinkError> {
         unsafe {
-            match Pin::get_mut_unchecked(self) {
+            match Pin::get_unchecked_mut(self) {
                 Either::Left(x) => Pin::new_unchecked(x).start_send(item),
                 Either::Right(x) => Pin::new_unchecked(x).start_send(item),
             }
@@ -266,7 +266,7 @@
 
     fn poll_flush(self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Result<(), Self::SinkError>> {
         unsafe {
-            match Pin::get_mut_unchecked(self) {
+            match Pin::get_unchecked_mut(self) {
                 Either::Left(x) => Pin::new_unchecked(x).poll_flush(lw),
                 Either::Right(x) => Pin::new_unchecked(x).poll_flush(lw),
             }
@@ -275,7 +275,7 @@
 
     fn poll_close(self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Result<(), Self::SinkError>> {
         unsafe {
-            match Pin::get_mut_unchecked(self) {
+            match Pin::get_unchecked_mut(self) {
                 Either::Left(x) => Pin::new_unchecked(x).poll_close(lw),
                 Either::Right(x) => Pin::new_unchecked(x).poll_close(lw),
             }
diff --git a/rustc_deps/vendor/futures-util-preview/.cargo-checksum.json b/rustc_deps/vendor/futures-util-preview/.cargo-checksum.json
index c66fe78..84f424c 100644
--- a/rustc_deps/vendor/futures-util-preview/.cargo-checksum.json
+++ b/rustc_deps/vendor/futures-util-preview/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"e7a7982c92b06c772bbb36d16c0d2a83c2f806165c90800438a1e17fa17c291f","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","benches/futures_unordered.rs":"c4067ca205a37be6692a7685a1429169609fc2661178b7e2962f42e9f51bf08c","benches_disabled/bilock.rs":"d8e365e7f7a918de865f76cf27ee54cdee43959487459689c6c935d626f6a295","bilock.rs":"17d56a1e9bd8bc7437088ec6d2e3572604a1856253a30737f0c4f1a1ba2b338d","src/async_await/join.rs":"d217167b5f58c117fee656110caeda57d96d032e50bd6ff1c77768b60e1f72f1","src/async_await/mod.rs":"bbf170d7f87add11e2c2cdb03e1352a7b50faebfa33efa09343fc455cea712ef","src/async_await/pending.rs":"dbbf37f4d18dc3f769da0ae8b4f43d55558525aa40e445d736a74c87297bad0a","src/async_await/poll.rs":"acd81ba4aeb7d5dc66f76dd9b34aebefc1d2c835ede99d81457b574f693e78db","src/async_await/select.rs":"3739d44d352e257228c458677de8ec3dba1b91cd40a07b9a53a923881ac13db2","src/compat/compat01as03.rs":"7636336d38f1e879ef92e6d4c2be865f71fa09f366853f7eb3d2c5966c2d5baf","src/compat/compat03as01.rs":"bf8a2c27da757478ff2b08e3c48eeea4e707e6ddfb324353292d25d13094f3fd","src/compat/executor.rs":"e15e85f4d92b4e3b998065805d46ed3d9bdc9d94d16524e96c780fdd58bc74de","src/compat/mod.rs":"9aac31c47bcee666c0c9ba306ac9405b873d3ef2928bc3439853b9ba49c057d5","src/compat/tokio.rs":"f0a8d0a90ac8659832bcd5d6a8622d3c63a67113394c265e8ec37191d79c30a0","src/future/abortable.rs":"4e0f1a3a7bdde4bf86bc36360c2e4dea9b1817c20e1868488fe777a661f474e1","src/future/catch_unwind.rs":"52ef2de818bae86f0d9d0b77be38c9f4745cd125b76d4e01c70aa34fe8ac88ca","src/future/chain.rs":"bbd89df2254d7b221ef16a5e916c73736ed3b034b8df09ec644f132d0dd7a823","src/future/disabled/select.rs":"71d192c9f61405ea75a2dd70d8fb289a6c7c3ec54d7831ba26b255361e689135","src/future/disabled/select_all.rs":"a5408e25c0203f5b7fcc49b5404dd67ad0e8cda90c3f9b9988c4fe5956b77ca1","src/future/disabled/select_ok.rs":"9a3e0eb3b25ab07d5e12b03ea517681da8f02c97c2dc47eb8039df5776bd269d","src/future/empty.rs":"8619b9926392eae1eca68f5e11b8202771e01af603b2793ece4876e70ae4c3c3","src/future/flatten.rs":"0885c827b92304ceaea4329d69d75039bf317876387769db304b1935a8e5e7cd","src/future/flatten_stream.rs":"bf312bc4e69ff1c8d52dede56474e036471fbe52a01e337db420f9b37476c4e0","src/future/fuse.rs":"978d17cabcb003af0ea69cbb3efb1c112143577607b538f8870b14adc9d5260b","src/future/inspect.rs":"84cbf19f1040a723ba83082df07fd8b95e9f48fc79ffb342d1b23811121eeb22","src/future/into_stream.rs":"dc6d9da71d9c1e072e9d515abb4c104eb2c5a76272206542abb63fb900a085ce","src/future/join.rs":"c1f05f12a0934ca08d8d37485382b21eadef0ab27da57a08f4233d85299efe2b","src/future/join_all.rs":"ce48fdd9fafbf37683b605b01c94cbeffadc0a0d4b2f955e4c3c2690af986a00","src/future/lazy.rs":"a76ed129594e830b83364fd66aac9abccb0313bda2b242982b48ccef8ad329dd","src/future/map.rs":"6d513f2c04be5fd2d7e7a321d80d93cae6852d9a6622eb0fdc24d3079070a628","src/future/maybe_done.rs":"7e76c694766147cb353fe8eca93733c101c16c3256dceae88a5009e387e48e61","src/future/mod.rs":"4806c999910cb0f425620f6c1ed7c54cfc616ddd2645ae53d8b1d816fb7b2dad","src/future/option.rs":"2e1b92c27b215e683b219906d6877382bfead03db75c439d2944659c84fe5a9e","src/future/poll_fn.rs":"8fdb810ee39e1fab63849aaa6209d3c743cf341ca312f1e9c6163292c192f052","src/future/ready.rs":"f25e27b2e216dad468db551e590fdfc88f800823ed0f22727fb30650cbce4556","src/future/remote_handle.rs":"e72e43f887eb8b3609f2d43cd4d131b6b42c25c61c0dffb9987f34a42ff80b69","src/future/shared.rs":"7e44a1ccd270a51bf6564ff738f27b8f05fce2702faf51d30e98934996658841","src/future/then.rs":"f09d830e5ce15a5a25aa8e1d79ea52ba6c40c7bea2d6a5f372a0206d4b903c78","src/future/unit_error.rs":"ab8e4a637f8314627d8aa36837f41a455b255ee27f2e13e927e2be5d965b8062","src/io/allow_std.rs":"0ebf0f6f362a751a66098988fcde3e412e8cf776e6c646f391aa682dbcbc69c8","src/io/close.rs":"d0f43812e07a0af83d39ea0d62c6d44043e898591b9edba60b79b307c6d8e47b","src/io/copy_into.rs":"b034242ff365f6c34c83ac593715355b928cb7ce8b4cdc238dd532ebc84d3c4d","src/io/disabled/lines.rs":"19104891ba87e8199a95dcb742e0311a40a058a3e191d5152f1f8fbe20221d6f","src/io/disabled/read_until.rs":"b5771d78aaea0b6d7e5efa3c3cbbc745227ef008f7c9a3a8d6803ad3917c2934","src/io/flush.rs":"7e123732d927b8a723efbbe2a850245ca780c2e1028f3d1477f4d9cc2b39a36d","src/io/mod.rs":"30e53102ad28edbe2f08f946532e876e9bcf2ab3e7f4cef9bae670d86a68b1d2","src/io/read.rs":"9b16fdb9f1885708fe68b186aed0ac72c17ed27cc13ff9216a24f0ad0be48bd8","src/io/read_exact.rs":"63604de3cdc064dbcd46ab41e8d108c041222e8addcebe55570daff9ab4dbd6b","src/io/read_to_end.rs":"df77cff3e3c0937d79581350caf0065215bba29efe3db06cb5e290f559898d1f","src/io/split.rs":"03f5fd14eaa33ea6363a03c6bfbc3ea8cba5bf1c78954551e62ca7facc546b52","src/io/window.rs":"e6fca0e2e8d99c76b4fe3ab9956997c6fd8167005d4dec01cae0c7879203e3c5","src/io/write_all.rs":"fb7d2b22899d9e63f78d7f2cec5a7b04d6ee187ec0dae9e1afc91b394923dd9e","src/lib.rs":"f4d23f411f151574ea5afd749845f052b4d9f79f6b9053d671d7db0a7bae1657","src/lock/bilock.rs":"fc3ac9a4991546da6f0bc8341b75c3c8433cd39dc0057a47a6cfc385f1495830","src/lock/mod.rs":"fb0dd828b864bc9b3413a4a1bca8ec3b3f979e790f91bf505a4758fd5ae920e1","src/lock/mutex.rs":"693bfc31c09fb6dbc962881d2c554585ec672285996ca9eafbbc1e18feb0a311","src/macros/mod.rs":"8a71fe88cb0d13cac1cdc36083c2d7c2683699d5adaf62978f1dccf6ed7e7365","src/macros/poll.rs":"bce71e2fafd7453a551d66d48dfc7a1ab552adc68e85aaa00362aeffd4c89ac1","src/sink/buffer.rs":"e0877350739624f8166d6ab5b409e851b3459404aa81ed29678ed30c9e17fa7a","src/sink/close.rs":"da3bd919834d481f227dde4fb4c803b870fc8608a9fc10c650f12a10dd81c33a","src/sink/drain.rs":"cb9dbe44c90f5954b46ee2ee4f4fb0ff8196df986c2594c2167f9df1244c7009","src/sink/err_into.rs":"fbd8c80e57691bd96d8c63a08129ed6e52a6c7c80101ed1e7a1b3583af47ca42","src/sink/fanout.rs":"6b588848ba271d2a0a3603a06026d6e26f9d1b72f7dd305931ca28451fd40727","src/sink/flush.rs":"c0ab495c6356210f33fbce6e4007622d23b4489312f81525d3765692fdc90f04","src/sink/map_err.rs":"25f19ad27276ed35c709b03d2dea195c57cfa52bfba2d938e62cee565c8c1d2b","src/sink/mod.rs":"2e61902a9983f94aee1541bb46ca0a519721824f3f0bd4a54b65bb00ce6e643e","src/sink/send.rs":"76f54ba56bc07277a07f241a925a1eb6e798cea66a6b0855f5816867e55110ba","src/sink/send_all.rs":"667548057131fbc0dcb41e241b8d62dacfd3b92c4583c47bcf1c703fac7f398a","src/sink/wait.rs":"b2d016ad492a04d589c6766f7761b1c3e977cac17344feefe932cbd4d804ac53","src/sink/with.rs":"a143456bd6d6052cb03d9e3c0050ce421c9bf711af9e5e1c3b9e1467ba9d1da0","src/sink/with_flat_map.rs":"b972f8b97abdaba70bc61dfa92c9386ef216b60dfac23cc7c6c42cbf4b191dae","src/stream/buffer_unordered.rs":"cda98498b8f9496009cbd737b21ba12598577b22326eadb397b06123ecd14099","src/stream/buffered.rs":"855c8d6964c06656d8e0d348c004d3e8108d338c9a3e181ce692f09876ebc689","src/stream/catch_unwind.rs":"d963302bc32999b5ab633a81715d4b586709c001c7a1a65134fefe81f9d64abb","src/stream/chain.rs":"bac6c6e7ca2435431fce23fecdc7433c90c3cc1b113bace94e7d3fc68d4e0b6c","src/stream/chunks.rs":"46e4f65eb2826cfa7a749d20ab828cb6b404a80efabf53586629373a4e6938bc","src/stream/collect.rs":"e85491b0c6cc2af98cba40afa81686886042f925361940f9b0e0df8c78b9f5fa","src/stream/concat.rs":"32ef8ff64e6525e051c639c1d9b32d13b443d808b9c81c697ae2f5bde8f37a87","src/stream/disabled/select_all.rs":"8c39b58462e8d64a0b07e1cfdaf01cd3b851715b7a2c4cb10b9e2a990ea6f6fc","src/stream/empty.rs":"8a6dc6561d75890cc9110cbe2f0a9736f89b737258a15667d27eb3f36594075f","src/stream/filter.rs":"5f7251da981d8d1df470615d9a85028933a96fd67a441fa934c7023641aa7c70","src/stream/filter_map.rs":"68a80d448c1fdb8cc7709a4450903aae8a84902c85116b774ab51c6edb51dbdb","src/stream/flatten.rs":"57c2e7cc8d322ab39cb7b2cc0b64d5454bf521c0f0c98b6171a94a04247ca4d4","src/stream/fold.rs":"7a0f1bc0f4414d9da2493b9c6d1e96b3f0d0ad016d2e0a27c48fd70ec245883a","src/stream/for_each.rs":"eb02a9b1adaf19cac841bdf7793621f2883ab7820b1140a7dbd90475cf915e01","src/stream/for_each_concurrent.rs":"5147c156c5b67f5ed2b24513e6d7266b2e0a15b98e5524b463908841f84cd707","src/stream/forward.rs":"c630961444a45a940643fc158a45376643bc64e6ca780c874ab3f6fde7ac4282","src/stream/fuse.rs":"d1c62ba9991f5d8a5fc6b9a1e3d09d3df18e10fec48d95c32430e4d85cd00520","src/stream/futures_ordered.rs":"89503382d238c84ac4ae2e4fd7e810408030f4aa5ad349518f48fbe6fc57f247","src/stream/futures_unordered/abort.rs":"bdfece9f91accafd5122be36d628c37c5b219ac0eecec181267840fbb1e95a45","src/stream/futures_unordered/iter.rs":"c023ed97bf6239ed3bfdca5fa9db175e2a8e4107bb248b71bb304e0aa896d296","src/stream/futures_unordered/mod.rs":"5ea160720af138d3f4c184eb29a6eb462d29f1b0ddabcfe0f67b592b66a07d09","src/stream/futures_unordered/ready_to_run_queue.rs":"81382095c3e08ee909e07893de37350bd35e353a034652569706b5e0b2d7c8cb","src/stream/futures_unordered/task.rs":"f78fe2a3c68670d319c5a20062ecfc64f07914fcae08edb4d061719555fa91a7","src/stream/inspect.rs":"09b19ad9f4daa3874e27bf7b4fb2b3abfa65174b546cecf809c90ecb7fcb33dc","src/stream/into_future.rs":"d69140a5d1099d172088b87a8e6b7c9a274e35ddae86e777228e0faaeed8fa03","src/stream/iter.rs":"c9fdfec8ec39c63b9d97d0ec87fdc0ae67731e4b365c71defaf77f226fb5aa67","src/stream/map.rs":"10a4442bfbfa07c07d1828e77622d494201744bf72bff79e04089685ba8c1ba4","src/stream/mod.rs":"a921371472cec98d7851a90c269d5918e9ee6dd7b760593c74d95f1f5530b6b6","src/stream/next.rs":"51c600a6a4162c7ff7f739aa9de460f32190aa00cdd9cfcc31b9f64d64bd93fd","src/stream/once.rs":"cb0625aabcb651ea5c7eb15247492927ac5b35bdbfaa8fb8a0c5c2e9b5615da8","src/stream/peek.rs":"b75e36bef52ec8d9d7153861a49781e1cbf9f8cfcd1d66c59dd0a8474e9a93b8","src/stream/poll_fn.rs":"fca1f30bb53247e8304f4e28eb5719240147f5f0d8e9b77088b6f30ff863ecee","src/stream/repeat.rs":"3dcd126b309498248a5737af9a55d86bbd1a3c1f4270d28bc63004010ad4408e","src/stream/select.rs":"9fc07b1a288cbee572ed3e78400e77eecef042aa34496e3bfe35d331e87db26e","src/stream/select_next_some.rs":"55df88155b650033e205fb185497f20bf6f828205b08428495758657da21bc27","src/stream/skip.rs":"4f4af0f4c6b310b5fca7db12485a4222d2937252332bfe3607a366316abc9dda","src/stream/skip_while.rs":"45795b3b650ee396afaebc301929b8149538b3ecfcc9bfa158434c66e9cc72cc","src/stream/split.rs":"0bb9ae3d34021cacc2def57c01e5311766ba4675004fca74e137a99ce7cc4cdf","src/stream/take.rs":"67315dace30a985489cdf94617dd9cf1583b0f676a86ab29d116ca9ea8910bb1","src/stream/take_while.rs":"e3aeac1975fdbbe5996398c7e0b6fc9d52cd2b4cedccde73c05bce283f07ffff","src/stream/then.rs":"6a94182b1a6cf0269510713ced2cf1c7f605fb14d39295cc6325f731b65b6fe1","src/stream/unfold.rs":"7ed27acb0844eb02fce960e7fdb7b99e4eaec4c6290559724c0863cc1e7f8d6e","src/stream/zip.rs":"3c95acac8734e1a05fa672e12333cbf40c4c914f2bb62bdba98831b63426d491","src/task/local_waker_ref.rs":"80ec2c71794198da44067563f26e499056d5ad7c96c1f0c3a9735ac627dfea1f","src/task/mod.rs":"fa47f30e70e82e401f55b56ca00bee86ef8a1b07c41c99aeb8a8260bdc57f7bf","src/task/noop_waker.rs":"e74e5b87e531e943bbafacb1e134d78f195ce838520a9159343352fa65cfc7d2","src/task/spawn.rs":"e409f9b32131a98470a611af767c0e09a661672149a66df5c596c46f0695fd95","src/try_future/and_then.rs":"cdcec0ea44e20ecd7ee37d8606876cf15fa896396bf75bbc309a9b41a9516f8c","src/try_future/err_into.rs":"65dafd4de3c2623b82bb316da4fe0ba316405dcdc8869215e9333d34226b5777","src/try_future/flatten_sink.rs":"357b647b5d3999256f1fa029155e08ef4efd40526426cb040cb84585e31dafa5","src/try_future/into_future.rs":"5e779d9e4acfa24712809117b6479d77d1eef1392d3387854e7aad09c4ce45dd","src/try_future/map_err.rs":"5d9a75c23e36a484a734b0681fc942ad8c446ac50643145dbc1f0c5a8e9dbd3a","src/try_future/map_ok.rs":"e0be78f2c8881e96777a884eb16c7bfb7c5ca007858180cae8ef3bec43441a25","src/try_future/mod.rs":"37d025c880013644166ab1f95e4a14d895fc37b49d1908660af8365748202901","src/try_future/or_else.rs":"51ab8ccb846fecfdf2bde849f5118badc50ba013e7cba5b93bfc3654505b6b47","src/try_future/try_chain.rs":"37207c85ddc8a2173bfaaa734b82f3860dcff053db5e5415ec5a87e197ad4b6c","src/try_future/try_join.rs":"4479b5f33123057992b0bf1c3d436e9344fb5e77e3ceaf56c1fe17d46f6765ec","src/try_future/unwrap_or_else.rs":"daba8330d5598acb00127eb2e12385422fdfa69d6ce331560a3e36df26b4dc8c","src/try_stream/err_into.rs":"c764dbd967aa056888f9ec309ad20eec077268f3101aa4267411896026967a0f","src/try_stream/into_stream.rs":"f62b213b23f9ff28d08a058c7eac842f7d3d96e0e20c58ab4b34134301d5d45e","src/try_stream/map_err.rs":"ea09004f61fff0420452d786a3f6fdd16549b3a195a6b15896de1acce77164a7","src/try_stream/map_ok.rs":"2eebf0e9501214b537811c593fe6430c4f2068a6ddeb43e09c183d144ca5d291","src/try_stream/mod.rs":"578223ce009bfc97bcfb2fb92ec5eff5592b268d6ce1d740f854dc800356a1fe","src/try_stream/try_buffer_unordered.rs":"cfbba47a7da2a13564c9e0bffe23f9010e8c91e280e24eb6046a0524c7da530e","src/try_stream/try_collect.rs":"52f529642b91255cbdc961d0ab50e9859ae6c762d3c461c7cbc7ba57ba92567d","src/try_stream/try_concat.rs":"f56b8120060ed01297ba50b5466734883f3209fc19fef642f110f1dcc5c9bff2","src/try_stream/try_filter_map.rs":"71cc02d738f809ce587b38e9047844194a0e163ae438063d8cba064ceac92260","src/try_stream/try_fold.rs":"ba792dc45976ed6ab3f936140b69e64ec1110097bb1137b125637cad74050744","src/try_stream/try_for_each.rs":"251b5d75ff75dd4711cf66fb2c999d89d3b8b33dba965cdf1696efed8d613b60","src/try_stream/try_for_each_concurrent.rs":"8dfddf4335fc58c1ff462d274ac06fe6c7f94a88e8a5e1a180bcd4a8174602ab","src/try_stream/try_next.rs":"7eb4e3163c8f8bfc57be38d8a1d0fa90c63c1e292d02032529d998569e214a23","src/try_stream/try_skip_while.rs":"9331959b80a60ee73a2d5c2256c0df56052e64e404b0c0eb9e69f58f1689b78c","tests/atomic_waker.rs":"b40e89e6ceff77ecdc70e83e5a1045eadb099096b5cfc37f551a9f1ada3c23d4","tests/futures_unordered.rs":"b1a9377b3ca5fdc7d95785da3922a4b50d3344151d816bf32cd7cf7bf40a029f","tests/mutex.rs":"e9a1c971027992df486f10a165452fb5ab1edc7ad7ea19eb5db91d5f868c63df","tests/select_next_some.rs":"a60d427021228eb1f0e6e551af44d3775e5b085e536f4594fb64dcc2a2a7df09"},"package":"da1b10501982f32b1f95e1f3c2e1accf53b2f26c8eb21374329c8f0a985d5dcf"}
\ No newline at end of file
+{"files":{"Cargo.toml":"bb2e454a12307bc7468db64dc2c0dbab7576ebffc3cb4c58f37a655fe1d23db7","LICENSE-APACHE":"275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427","LICENSE-MIT":"6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd","benches/futures_unordered.rs":"c4067ca205a37be6692a7685a1429169609fc2661178b7e2962f42e9f51bf08c","benches_disabled/bilock.rs":"d8e365e7f7a918de865f76cf27ee54cdee43959487459689c6c935d626f6a295","bilock.rs":"17d56a1e9bd8bc7437088ec6d2e3572604a1856253a30737f0c4f1a1ba2b338d","src/async_await/join.rs":"99f66db0cbe7cddb23dad1b80bc6c719b0594c2c839fd860d3c55f001a9e15b1","src/async_await/mod.rs":"557c8f5868e220dd7ff922893ee509888a3402611a70f6b2deb09ae142a53588","src/async_await/pending.rs":"dbbf37f4d18dc3f769da0ae8b4f43d55558525aa40e445d736a74c87297bad0a","src/async_await/poll.rs":"acd81ba4aeb7d5dc66f76dd9b34aebefc1d2c835ede99d81457b574f693e78db","src/async_await/select_mod.rs":"58e66804778f32f2248291faa6682edfb6774271cfbfd2c14991d5d34a488cca","src/compat/compat01as03.rs":"db20a80598afee842c097dc0bddb1b9c6599760c348ad92e052e6098aa556937","src/compat/compat03as01.rs":"bf8a2c27da757478ff2b08e3c48eeea4e707e6ddfb324353292d25d13094f3fd","src/compat/executor.rs":"e15e85f4d92b4e3b998065805d46ed3d9bdc9d94d16524e96c780fdd58bc74de","src/compat/mod.rs":"9aac31c47bcee666c0c9ba306ac9405b873d3ef2928bc3439853b9ba49c057d5","src/compat/tokio.rs":"f0a8d0a90ac8659832bcd5d6a8622d3c63a67113394c265e8ec37191d79c30a0","src/future/abortable.rs":"e0465ce1dba2b51374afb748356f6cadbae926041150e07b2c12b5a3e97bdba2","src/future/catch_unwind.rs":"07d395fade5774178d8f21dac09dfb59b726627886479fd91f22436bee8c2569","src/future/chain.rs":"3bf354e8d4d9732d5c98418865db6a35ccf65f09a98a156b7bf963f7bdaa2ced","src/future/disabled/select.rs":"71d192c9f61405ea75a2dd70d8fb289a6c7c3ec54d7831ba26b255361e689135","src/future/disabled/select_all.rs":"a5408e25c0203f5b7fcc49b5404dd67ad0e8cda90c3f9b9988c4fe5956b77ca1","src/future/disabled/select_ok.rs":"9a3e0eb3b25ab07d5e12b03ea517681da8f02c97c2dc47eb8039df5776bd269d","src/future/empty.rs":"8619b9926392eae1eca68f5e11b8202771e01af603b2793ece4876e70ae4c3c3","src/future/flatten.rs":"34b46f82a28b964c3315ea154d7fed8afa3c5a53e9435cc9fa85573048a78d6d","src/future/flatten_stream.rs":"3b7a3e894d06f569cb43c8a5a2324db38b9344ca93da1d80cc9685f0768bf35b","src/future/fuse.rs":"cf7f4501b928b6a7b2a30d1131a4923f714d89a90efd783cb79c1f3c7ef0283c","src/future/inspect.rs":"5c386f856a410cc19ea9cb2e13ff5e1f900b6e61d9a9b7d9d8479110a9b7e286","src/future/into_stream.rs":"2d3cf660edd447f9353a5aa9da51dcd44a8e33a667b315256ce468d10932e3ff","src/future/join.rs":"36dcb7e4fd4433dba324ddd4ea50ecc01ed7d59cf72fa5cd865e1d7032074e81","src/future/join_all.rs":"51213ee752a438f6f9c214518724553b8c95d649aadbdb2a4fc4bfe2eab1f6cc","src/future/lazy.rs":"a76ed129594e830b83364fd66aac9abccb0313bda2b242982b48ccef8ad329dd","src/future/map.rs":"d41d70122b3f9f51c2055f9659b97838fb07cea0e2f22df52487aa0b1b06c3c4","src/future/maybe_done.rs":"a334562b970ff3202766164a62595cdce959ae1a732a89fe6d44e45aff68abab","src/future/mod.rs":"2ad49b194ead260db8a5fe21aeb504074bbb2643da3af8c1789a5a533e5d3852","src/future/option.rs":"0a3c10304d9909213f49426c155cf3f5aef66bd9e335249537f0f5983497ce13","src/future/poll_fn.rs":"8fdb810ee39e1fab63849aaa6209d3c743cf341ca312f1e9c6163292c192f052","src/future/ready.rs":"f25e27b2e216dad468db551e590fdfc88f800823ed0f22727fb30650cbce4556","src/future/remote_handle.rs":"c16724372119584afa1e5c5683ac1a28d972e460a4740206a9e078b4d5fb89aa","src/future/shared.rs":"7e44a1ccd270a51bf6564ff738f27b8f05fce2702faf51d30e98934996658841","src/future/then.rs":"8669d687199d85958c8497b2a8061ebab18e01d90cb0a623a1dc8a4e85821917","src/future/unit_error.rs":"36dda094ea8c91c971c335ad7f635608ba62698c3cf94943d1c8dfff0d097e59","src/io/allow_std.rs":"0ebf0f6f362a751a66098988fcde3e412e8cf776e6c646f391aa682dbcbc69c8","src/io/close.rs":"d0f43812e07a0af83d39ea0d62c6d44043e898591b9edba60b79b307c6d8e47b","src/io/copy_into.rs":"b034242ff365f6c34c83ac593715355b928cb7ce8b4cdc238dd532ebc84d3c4d","src/io/disabled/lines.rs":"19104891ba87e8199a95dcb742e0311a40a058a3e191d5152f1f8fbe20221d6f","src/io/disabled/read_until.rs":"b5771d78aaea0b6d7e5efa3c3cbbc745227ef008f7c9a3a8d6803ad3917c2934","src/io/flush.rs":"7e123732d927b8a723efbbe2a850245ca780c2e1028f3d1477f4d9cc2b39a36d","src/io/mod.rs":"30e53102ad28edbe2f08f946532e876e9bcf2ab3e7f4cef9bae670d86a68b1d2","src/io/read.rs":"9b16fdb9f1885708fe68b186aed0ac72c17ed27cc13ff9216a24f0ad0be48bd8","src/io/read_exact.rs":"63604de3cdc064dbcd46ab41e8d108c041222e8addcebe55570daff9ab4dbd6b","src/io/read_to_end.rs":"df77cff3e3c0937d79581350caf0065215bba29efe3db06cb5e290f559898d1f","src/io/split.rs":"bd30c671b2ab7205f65738b50c8b8cbccdabfc5aa27de8edd12d282b0aadc6f7","src/io/window.rs":"e6fca0e2e8d99c76b4fe3ab9956997c6fd8167005d4dec01cae0c7879203e3c5","src/io/write_all.rs":"fb7d2b22899d9e63f78d7f2cec5a7b04d6ee187ec0dae9e1afc91b394923dd9e","src/lib.rs":"2bb95031e12e2d8451399e0ef389616a5b4463b530669fb5406c1d3884d4bb90","src/lock/bilock.rs":"fc3ac9a4991546da6f0bc8341b75c3c8433cd39dc0057a47a6cfc385f1495830","src/lock/mod.rs":"fb0dd828b864bc9b3413a4a1bca8ec3b3f979e790f91bf505a4758fd5ae920e1","src/lock/mutex.rs":"693bfc31c09fb6dbc962881d2c554585ec672285996ca9eafbbc1e18feb0a311","src/macros/mod.rs":"8a71fe88cb0d13cac1cdc36083c2d7c2683699d5adaf62978f1dccf6ed7e7365","src/macros/poll.rs":"bce71e2fafd7453a551d66d48dfc7a1ab552adc68e85aaa00362aeffd4c89ac1","src/sink/buffer.rs":"47f6b121c26b0ae4fa7afc015e37ec4c5d3b7253f1401eb05243e00084112fce","src/sink/close.rs":"da3bd919834d481f227dde4fb4c803b870fc8608a9fc10c650f12a10dd81c33a","src/sink/drain.rs":"cb9dbe44c90f5954b46ee2ee4f4fb0ff8196df986c2594c2167f9df1244c7009","src/sink/err_into.rs":"cfd96d6e54f742d0024b00b0e686e1617433a6030d361ba962164fa76a3f2f82","src/sink/fanout.rs":"921b2384a7abc9d85a84563b1c66f58f3c5de7afdc9a61411bdf670260933e87","src/sink/flush.rs":"c0ab495c6356210f33fbce6e4007622d23b4489312f81525d3765692fdc90f04","src/sink/map_err.rs":"7725339e4a09c27f66339f9fb444e53eb7bd51d2c3dc6897e4eb220bfc778415","src/sink/mod.rs":"2e61902a9983f94aee1541bb46ca0a519721824f3f0bd4a54b65bb00ce6e643e","src/sink/send.rs":"76f54ba56bc07277a07f241a925a1eb6e798cea66a6b0855f5816867e55110ba","src/sink/send_all.rs":"667548057131fbc0dcb41e241b8d62dacfd3b92c4583c47bcf1c703fac7f398a","src/sink/wait.rs":"b2d016ad492a04d589c6766f7761b1c3e977cac17344feefe932cbd4d804ac53","src/sink/with.rs":"06b2bf5debb70aea12cf24023670857db078711e4f56494e6b683eac2d441ecf","src/sink/with_flat_map.rs":"d42194b1cb8db838af46c115579cde9328fd3f6f62bcd603b5dbb44ed96708d7","src/stream/buffer_unordered.rs":"02970262376ca53168c87ea24836f76328b5c40709beda109a04b1578ea3feda","src/stream/buffered.rs":"45812fa9eeb5680622200e19ed718c0352820235c9ae150826fd894177d5acb8","src/stream/catch_unwind.rs":"f89d2a96f0af725351b4fe25aba8193acf78cfd100ee540513875707155d83c9","src/stream/chain.rs":"1cf6ad342426a1ccde10c8280467fb96b7770ad65de6e17536b9c46b23642b86","src/stream/chunks.rs":"53acdc1b94a6fcc774c06c6cd795320f87fe1f2cbe86be3ebced2146c6c181be","src/stream/collect.rs":"d7a6442a797980438b363346638294efba31617b66a382fc112878f54d1b205b","src/stream/concat.rs":"706615b0155f49f0c8d50768db2e6797884b3c4e282da7a4374a6311aeb4e0f0","src/stream/empty.rs":"8a6dc6561d75890cc9110cbe2f0a9736f89b737258a15667d27eb3f36594075f","src/stream/filter.rs":"ccec839f2dfff9e1dbac59298646b9f3db8ec9c5b8a770b305acdd851e5996c7","src/stream/filter_map.rs":"a131dfe2027f5a52f7354d85610361371e5ee5e0accc11ed6f456bc2d3277bf4","src/stream/flatten.rs":"adb6ac0a44960ccbdd2bd37615c6ae0e055e78e2f032a36e28da643e9493b3cb","src/stream/fold.rs":"7793acd6405fcccb908f2218bfde682dce7734d91245a9f9d269e31709716a32","src/stream/for_each.rs":"e57d17032a27d99c6678c56f3eb789b6433175fd79fea50d8b924ad6e3ea2c02","src/stream/for_each_concurrent.rs":"1743b5d59bba1de2dfe14435d352265bef78acdc56b795005a989f7a59a94ef2","src/stream/forward.rs":"f5401f3b1936337723c8408c600b9eb0df774fae09ad779a656f2eaef969258b","src/stream/fuse.rs":"9d3273807e3c6fe66c47cdbdbe622e2857b20b41e8c8906a0adbb67506d8060e","src/stream/futures_ordered.rs":"46e1e118bee3ae686aef47709daba75bfe31535b360f8606938ab2f4edbd369d","src/stream/futures_unordered/abort.rs":"bdfece9f91accafd5122be36d628c37c5b219ac0eecec181267840fbb1e95a45","src/stream/futures_unordered/iter.rs":"c023ed97bf6239ed3bfdca5fa9db175e2a8e4107bb248b71bb304e0aa896d296","src/stream/futures_unordered/mod.rs":"8ea864e12c53a5b5e60980d906b053a8171bd4335f52eba0aa9d8703a327b8f5","src/stream/futures_unordered/ready_to_run_queue.rs":"81382095c3e08ee909e07893de37350bd35e353a034652569706b5e0b2d7c8cb","src/stream/futures_unordered/task.rs":"3bf7dc46cb1edae1fb4b31130ab833f26ca961fcde6d1fc76305e8ef38065dd9","src/stream/inspect.rs":"6c7f23a24a51ece55ad7747588fa94f2b19ea390119316c5fc3ecc9f3bd9d71b","src/stream/into_future.rs":"d69140a5d1099d172088b87a8e6b7c9a274e35ddae86e777228e0faaeed8fa03","src/stream/iter.rs":"c9fdfec8ec39c63b9d97d0ec87fdc0ae67731e4b365c71defaf77f226fb5aa67","src/stream/map.rs":"740b68e2aad3252bdda02f9cee07c8cca1c1d4970a9f8e3bb486f0c5ac4e4ff2","src/stream/mod.rs":"038bb07d2832074525a305b420177e91fd79c978ee8c8e659758136cdf30e220","src/stream/next.rs":"51c600a6a4162c7ff7f739aa9de460f32190aa00cdd9cfcc31b9f64d64bd93fd","src/stream/once.rs":"32e33700dd7f6fd0ccf44149c71fb653343b97e2c12f1116b6d2aec82eb79888","src/stream/peek.rs":"773c46191b82d33130eb9aa8d58d161d1bddf55c212c6dc48e2396bf7e982e69","src/stream/poll_fn.rs":"fca1f30bb53247e8304f4e28eb5719240147f5f0d8e9b77088b6f30ff863ecee","src/stream/repeat.rs":"3dcd126b309498248a5737af9a55d86bbd1a3c1f4270d28bc63004010ad4408e","src/stream/select.rs":"340bf7f50ea56caf273724cdbac0154fbe8260f74820c1d1e37c029440611024","src/stream/select_all.rs":"64fe5af30790e5487489b183e91b9b8b0524de3bfb857b5770d34c5d04cd95b2","src/stream/select_next_some.rs":"55df88155b650033e205fb185497f20bf6f828205b08428495758657da21bc27","src/stream/skip.rs":"b7fe9bdab53c25b17a6a9e15ceb558008974b4f24b87d7dc2038094f0fed1bbf","src/stream/skip_while.rs":"da301033ba424d1b02f9c95b5e5780e06a08d34dcb7711195f0d90976c15b1a1","src/stream/split.rs":"0bb9ae3d34021cacc2def57c01e5311766ba4675004fca74e137a99ce7cc4cdf","src/stream/take.rs":"620bef8697348aad25fa2e9463c99d53ad8cebeeaeb7fcb32d8cb23ab66e8689","src/stream/take_while.rs":"b2e56d469731850f5071f53ac1d7bae293fa5ed2276211918bafda06bd1a9c19","src/stream/then.rs":"896599269be9738661f4bd59cc58ec6f9e6a2a6a7429b471aa1d671bc68b0881","src/stream/unfold.rs":"741b7d18014ab678a8b06bfca7ac23d508a5e5ec6fc75f773f4344b860b1a909","src/stream/zip.rs":"a42d5851294ab9404a2ec7df0baf48f80d6ca54c8a69b36127a2bde13fe3e2ea","src/task/local_waker_ref.rs":"80ec2c71794198da44067563f26e499056d5ad7c96c1f0c3a9735ac627dfea1f","src/task/mod.rs":"fa47f30e70e82e401f55b56ca00bee86ef8a1b07c41c99aeb8a8260bdc57f7bf","src/task/noop_waker.rs":"e74e5b87e531e943bbafacb1e134d78f195ce838520a9159343352fa65cfc7d2","src/task/spawn.rs":"e409f9b32131a98470a611af767c0e09a661672149a66df5c596c46f0695fd95","src/try_future/and_then.rs":"88b166cab5fb94e5c1cea552925691b35e8981d40c595d8e4ed9e7b3a0f10ca8","src/try_future/err_into.rs":"03c8006bda48257d9402ee93019f7df52d47c8f5e9e7d5827f0cd1941d637349","src/try_future/flatten_sink.rs":"7cc062a3ab6473435aa3153fa423b420ba0cb73cad8115caa09f34c2e557ed5e","src/try_future/into_future.rs":"d046b620c499502ab49cf1c38158f099bc6b467183a4d2187bdb978263ae9c9c","src/try_future/map_err.rs":"2c9a71a02167e49b8093f18cbf6aafdc1771e824e3e5452e87f68984e2376653","src/try_future/map_ok.rs":"11efbd90f59bc775e21c0e462d20c8944a8ff7017ee790be8d7fd53bd449e40f","src/try_future/mod.rs":"37d025c880013644166ab1f95e4a14d895fc37b49d1908660af8365748202901","src/try_future/or_else.rs":"b8095bd3cd99d0f385dce49925ce4761ad9f4a34768126179e1ef7d138debe62","src/try_future/try_chain.rs":"cd98c9d375fd0c98545e7aacc725ce127d13799989a547dd148ae944d630ba23","src/try_future/try_join.rs":"43a4476d8d0be0fc8942890bc9573c9794f783c4a5d971afafbb8c42be2e1dae","src/try_future/unwrap_or_else.rs":"c10314a92d7011911d4c93b0b2699c41e86d924e998192f75b58ee4339712e88","src/try_stream/err_into.rs":"941057e9fa6d5562bc826418de696a5db6c983d2e487b147f7b4d80ddb4cc54d","src/try_stream/into_async_read.rs":"1ed5dccf6ab2e2152d2213a02bd9c3bcae231f1f5749c2668d742110a1202d25","src/try_stream/into_stream.rs":"f7777c66c15610e658ef4ce25be39e9d7101440781147481963c9e0f698ac24d","src/try_stream/map_err.rs":"14a5f3362c4a68ea6cef130e28ed6c0a43b9d7d1ac23a3ff5e1940db81d48597","src/try_stream/map_ok.rs":"ca36310d773ce0b35d274786aa90f3d8fe79bbeb68a6031da6d99473ecacb602","src/try_stream/mod.rs":"5679fffb713ab3440417f8d90f9372f718195861c0823a3a66cc9a8e21cd3c3b","src/try_stream/try_buffer_unordered.rs":"0fec42b94bcf464513d32fd36bbad2718e8a914db04e45efbc70fd505faae04d","src/try_stream/try_collect.rs":"259060861683904378b881c828e47f4cdfb68b5eb7af535e4ae2ce05ff354a1b","src/try_stream/try_concat.rs":"23cbbf2b4c3e8d2f966574383ed74ee4a727c91fa751e5630e08cde6633bc31a","src/try_stream/try_filter_map.rs":"9fe293dd3b6a3d816c6eae8b12781ba2a3f204a4af0cf2e5b78d8acffa6a18e9","src/try_stream/try_fold.rs":"2e05e403f8a8b1130244a98a7567e0240477fbfa021ab1a9a3484a7f5337485d","src/try_stream/try_for_each.rs":"2c9b3600e3b5068c6c100db6f2fe794663873e3264009f32e351e7890937e9c1","src/try_stream/try_for_each_concurrent.rs":"935a6d5b2933cdff29b5a8dc913747dbde2824fdb26ad36de1deda8f71b0d459","src/try_stream/try_next.rs":"7eb4e3163c8f8bfc57be38d8a1d0fa90c63c1e292d02032529d998569e214a23","src/try_stream/try_skip_while.rs":"5e8a80c7a79026c7fba4d9aa6fd8d54015b377d2f18661fdd9db1a35a291cbcc","tests/atomic_waker.rs":"b40e89e6ceff77ecdc70e83e5a1045eadb099096b5cfc37f551a9f1ada3c23d4","tests/futures_unordered.rs":"79a93494be12c03cccdd94ef69e83b630c95bac395844a358100225c26e433ef","tests/mutex.rs":"71a63e29057862d1ab8fe8dc8dc2c74e4625c7f4d9dba836319aaa369adc7533","tests/select_all.rs":"cec75a53b8300be6fd7c514620577944ef96238011866f89084b3af1da524f20","tests/select_next_some.rs":"392a3387e60a05887c184847284af583230a8dd4541ef6c4feb4132a671bc50a"},"package":"2aabd61c42118a455d62d13fb82c98b7e936f8fdc3810104ca8d9b11c5c2f0d6"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/futures-util-preview/Cargo.toml b/rustc_deps/vendor/futures-util-preview/Cargo.toml
index ac21d34..e2d2f74 100644
--- a/rustc_deps/vendor/futures-util-preview/Cargo.toml
+++ b/rustc_deps/vendor/futures-util-preview/Cargo.toml
@@ -10,16 +10,14 @@
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
-cargo-features = ["rename-dependency"]
-
 [package]
 edition = "2018"
 name = "futures-util-preview"
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "Common utilities and extension traits for the futures-rs library.\n"
 homepage = "https://rust-lang-nursery.github.io/futures-rs"
-documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures_util"
+documentation = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_util"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang-nursery/futures-rs"
 
@@ -30,19 +28,23 @@
 default-features = false
 
 [dependencies.futures-channel-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.futures-core-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.futures-io-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
+default-features = false
+
+[dependencies.futures-select-macro-preview]
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.futures-sink-preview]
-version = "0.3.0-alpha.10"
+version = "0.3.0-alpha.11"
 default-features = false
 
 [dependencies.futures_01]
@@ -51,7 +53,10 @@
 package = "futures"
 
 [dependencies.pin-utils]
-version = "0.1.0-alpha.3"
+version = "0.1.0-alpha.4"
+
+[dependencies.proc-macro-hack]
+version = "0.5"
 
 [dependencies.rand]
 version = "0.5.5"
@@ -75,5 +80,5 @@
 default = ["std", "futures-core-preview/either", "futures-sink-preview/either"]
 io-compat = ["compat", "tokio-io"]
 nightly = []
-std = ["futures-core-preview/std", "futures-io-preview/std", "futures-sink-preview/std", "either/use_std", "rand", "slab"]
+std = ["futures-core-preview/std", "futures-io-preview/std", "futures-sink-preview/std", "futures-select-macro-preview/std", "either/use_std", "rand", "slab"]
 tokio-compat = ["compat", "tokio-executor"]
diff --git a/rustc_deps/vendor/futures-util-preview/src/async_await/join.rs b/rustc_deps/vendor/futures-util-preview/src/async_await/join.rs
index da77c30..b367dff 100644
--- a/rustc_deps/vendor/futures-util-preview/src/async_await/join.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/async_await/join.rs
@@ -11,7 +11,7 @@
 /// # Examples
 ///
 /// ```
-/// #![feature(pin, async_await, await_macro, futures_api)]
+/// #![feature(async_await, await_macro, futures_api)]
 /// # futures::executor::block_on(async {
 /// use futures::{join, future};
 ///
@@ -63,7 +63,7 @@
 /// `Ok` of a tuple of the values:
 ///
 /// ```
-/// #![feature(pin, async_await, await_macro, futures_api)]
+/// #![feature(async_await, await_macro, futures_api)]
 /// # futures::executor::block_on(async {
 /// use futures::{try_join, future};
 ///
@@ -78,7 +78,7 @@
 /// that error:
 ///
 /// ```
-/// #![feature(pin, async_await, await_macro, futures_api)]
+/// #![feature(async_await, await_macro, futures_api)]
 /// # futures::executor::block_on(async {
 /// use futures::{try_join, future};
 ///
diff --git a/rustc_deps/vendor/futures-util-preview/src/async_await/mod.rs b/rustc_deps/vendor/futures-util-preview/src/async_await/mod.rs
index 8197628..ecd4e39 100644
--- a/rustc_deps/vendor/futures-util-preview/src/async_await/mod.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/async_await/mod.rs
@@ -25,8 +25,8 @@
 mod join;
 
 // Primary export is a macro
-#[macro_use]
-mod select;
+mod select_mod;
+pub use self::select_mod::*;
 
 #[doc(hidden)]
 #[inline(always)]
diff --git a/rustc_deps/vendor/futures-util-preview/src/async_await/select.rs b/rustc_deps/vendor/futures-util-preview/src/async_await/select.rs
deleted file mode 100644
index 719a0bb..0000000
--- a/rustc_deps/vendor/futures-util-preview/src/async_await/select.rs
+++ /dev/null
@@ -1,544 +0,0 @@
-//! The `select` macro.
-
-/// Polls multiple futures and streams simultaneously, executing the branch
-/// for the future that finishes first. Futures passed to
-/// `select!` must be `Unpin` and implement `FusedFuture`.
-/// Futures and streams which are not already fused can be fused using the
-/// `.fuse()` method. Note, though, that fusing a future or stream directly
-/// in the call to `select!` will not be enough to prevent it from being
-/// polled after completion if the `select!` call is in a loop, so when
-/// `select!`ing in a loop, users should take care to `fuse()` outside of
-/// the loop.
-///
-/// `select!` can select over futures with different output types, but each
-/// branch has to have the same return type.
-///
-/// This macro is only usable inside of async functions, closures, and blocks.
-///
-/// # Examples
-///
-/// ```
-/// #![feature(pin, async_await, await_macro, futures_api)]
-/// # futures::executor::block_on(async {
-/// use futures::future::{self, FutureExt};
-/// use futures::select;
-/// let mut a = future::ready(4);
-/// let mut b = future::empty::<()>();
-///
-/// let res = select! {
-///     a_res = a => a_res + 1,
-///     _ = b => 0,
-/// };
-/// assert_eq!(res, 5);
-/// # });
-/// ```
-///
-/// ```
-/// #![feature(pin, async_await, await_macro, futures_api)]
-/// # futures::executor::block_on(async {
-/// use futures::future::{self, FutureExt};
-/// use futures::stream::{self, StreamExt};
-/// use futures::select;
-/// let mut st = stream::iter(vec![2]).fuse();
-/// let mut fut = future::empty::<()>();
-///
-/// select! {
-///     x = st.next() => assert_eq!(Some(2), x),
-///     _ = fut => panic!(),
-/// };
-/// # });
-/// ```
-///
-/// `select` also accepts a `complete` branch and a `default` branch.
-/// `complete` will run if all futures and streams have already been
-/// exhausted. `default` will run if no futures or streams are
-/// immediately ready. `complete` takes priority over `default` in
-/// the case where all futures have completed.
-///
-/// ```
-/// #![feature(pin, async_await, await_macro, futures_api)]
-/// # futures::executor::block_on(async {
-/// use futures::future::{self, FutureExt};
-/// use futures::select;
-/// let mut a_fut = future::ready(4);
-/// let mut b_fut = future::ready(6);
-/// let mut total = 0;
-///
-/// loop {
-///     select! {
-///         a = a_fut => total += a,
-///         b = b_fut => total += b,
-///         complete => break,
-///         default => panic!(), // never runs (futures run first, then complete)
-///     };
-/// }
-/// assert_eq!(total, 10);
-/// # });
-/// ```
-///
-/// Note that the futures that have been matched over can still be mutated
-/// from inside the `select!` block's branches. This can be used to implement
-/// more complex behavior such as timer resets or writing into the head of
-/// a stream.
-#[macro_export]
-macro_rules! select {
-    () => {
-        compile_error!("The `select!` macro requires at least one branch")
-    };
-
-    (
-        @codegen
-        futs $fut:tt
-        default $default:tt
-        complete ()
-    ) => {
-        $crate::select! {
-            @codegen
-            futs $fut
-            default $default
-            complete (
-                panic!("all futures in select! were completed, \
-                       but no `complete =>` handler was provided"))
-        }
-    };
-    // Remember the lack of a default
-    (
-        @codegen
-        futs $fut:tt
-        default ()
-        complete $complete:tt
-    ) => {
-        $crate::select! {
-            @codegen
-            futs $fut
-            default ( unreachable!() )
-            no_default true
-            complete $complete
-        }
-    };
-
-    (
-        @codegen
-        futs ($( $fut_pat:pat = $fut_name:ident => $fut_body:expr, )*)
-        default ($default:expr)
-        $( no_default $no_default:ident )*
-        complete ($complete:expr)
-    ) => { {
-
-        // Require all arguments to be `Unpin` so that we don't have to pin them,
-        // allowing uncompleted futures to be reused by the caller after the
-        // `select!` resolves.
-        //
-        // Additionally, require all arguments to implement `FusedFuture` so that
-        // we can ensure that futures aren't polled after completion by use
-        // in successive `select!` statements.
-        $(
-            $crate::async_await::assert_unpin(&$fut_name);
-            $crate::async_await::assert_fused_future(&$fut_name);
-        )*
-
-        #[allow(bad_style)]
-        enum __PrivResult<$($fut_name,)*> {
-            $(
-                $fut_name($fut_name),
-            )*
-            __Default,
-			__Complete,
-        }
-
-        let mut __poll_fn = |lw: &$crate::core_reexport::task::LocalWaker| {
-            let mut __any_polled = false;
-
-            $(
-                let mut $fut_name = |lw: &_| {
-                    if $crate::async_await::FusedFuture::is_terminated(& $fut_name) {
-                        None
-                    } else {
-                        Some($crate::core_reexport::future::Future::poll(
-                            $crate::core_reexport::pin::Pin::new(&mut $fut_name),
-                            lw,
-                        ).map(__PrivResult::$fut_name))
-                    }
-                };
-                let $fut_name:
-                    &mut dyn FnMut(&$crate::core_reexport::task::LocalWaker)
-                    -> Option<$crate::core_reexport::task::Poll<_>>
-                    = &mut $fut_name;
-            )*
-            let mut __select_arr = [$( $fut_name, )*];
-            $crate::rand_reexport::Rng::shuffle(
-                &mut $crate::rand_reexport::thread_rng(),
-                &mut __select_arr,
-            );
-
-            for __poller in &mut __select_arr {
-                let __poller: &mut &mut dyn FnMut(&$crate::core_reexport::task::LocalWaker)
-                    -> Option<$crate::core_reexport::task::Poll<_>> = __poller;
-                match __poller(lw) {
-                    Some(x @ $crate::core_reexport::task::Poll::Ready(_)) =>
-                        return x,
-                    Some($crate::core_reexport::task::Poll::Pending) => {
-                        __any_polled = true;
-                    }
-                    None => {}
-                }
-            }
-
-            if !__any_polled {
-                $crate::core_reexport::task::Poll::Ready(__PrivResult::__Complete)
-            } else {
-                $(
-                    // only if there isn't a default case:
-                    drop($no_default);
-                    return $crate::core_reexport::task::Poll::Pending;
-                )*
-                // only reachable if there is a default case:
-                #[allow(unreachable_code)]
-                return $crate::core_reexport::task::Poll::Ready(__PrivResult::__Default)
-            }
-        };
-        #[allow(unreachable_code)]
-        let __priv_res = loop {
-            $(
-                // only if there isn't a default case:
-                drop($no_default);
-                break await!($crate::future::poll_fn(__poll_fn));
-            )*
-            // only reachable if there is a default case:
-            break if let $crate::core_reexport::task::Poll::Ready(x) =
-                __poll_fn($crate::task::noop_local_waker_ref())
-            {
-                x
-            } else { unreachable!() };
-        };
-        match __priv_res {
-            $(
-                __PrivResult::$fut_name($fut_pat) => {
-                    $fut_body
-                }
-            )*
-            __PrivResult::__Default => {
-                $default
-            }
-			__PrivResult::__Complete => {
-				$complete
-			}
-        }
-    } };
-
-    // All tokens have been successfully parsed into separate cases--
-    // continue to individual case parsing and separation.
-    (@parse_list
-        cases($($head:tt)*)
-        tokens()
-        labels $labels:tt
-    ) => {
-        $crate::select!(
-            @parse_case
-            futs()
-            default()
-            complete()
-            cases($($head)*)
-        )
-    };
-    // Error: no labels left
-    (@parse_list
-        cases $cases:tt
-        tokens $tokens:tt
-        labels ()
-    ) => {
-        compile_error!("too many cases in a `select!` block")
-    };
-    // Normalize input to the form
-    // `KIND pat = ident => ...`
-    (@parse_list
-        cases($($head:tt)*)
-        tokens(default => $($tail:tt)*)
-        labels $labels:tt
-    ) => {
-        $crate::select!(
-            @parse_list
-            cases($($head)*)
-            tokens(__DEFAULT _ = __DEFAULT_IDENT => $($tail)*)
-            labels $labels
-        )
-    };
-    (@parse_list
-        cases($($head:tt)*)
-        tokens(complete => $($tail:tt)*)
-        labels $labels:tt
-    ) => {
-        $crate::select!(
-            @parse_list
-            cases($($head)*)
-            tokens(__COMPLETE _ = __COMPLETE_IDENT => $($tail)*)
-            labels $labels
-        )
-    };
-    (@parse_list
-        cases($($head:tt)*)
-        tokens($fut_pat:pat = $fut_ident:ident => $($tail:tt)*)
-        labels $labels:tt
-    ) => {
-        $crate::select!(
-            @parse_list
-            cases($($head)*)
-            tokens(__FUTURE $fut_pat = $fut_ident => $($tail)*)
-            labels $labels
-        )
-    };
-    (@parse_list // catch `expr` and expand w/ `let`
-        cases($($head:tt)*)
-        tokens($fut_pat:pat = $fut_expr:expr => $($tail:tt)*)
-        labels ($label:tt $($labels:tt)*)
-    ) => {
-        {
-            let mut $label = $fut_expr;
-            $crate::select!(
-                @parse_list
-                cases($($head)*)
-                tokens(__FUTURE $fut_pat = $label => $($tail)*)
-                labels ($($labels)*)
-            )
-        }
-    };
-    // The first case is separated by a comma.
-    (@parse_list
-        cases($($head:tt)*)
-        tokens($kind:ident $fut_pat:pat = $fut_ident:ident => $body:expr, $($tail:tt)*)
-        labels $labels:tt
-    ) => {
-        $crate::select!(
-            @parse_list
-            cases($($head)* $kind $fut_pat = $fut_ident => { $body },)
-            tokens($($tail)*)
-            labels $labels
-        )
-    };
-    // Print an error if there is a semicolon after the expression
-    (@parse_list
-        cases($($head:tt)*)
-        tokens($kind:ident $fut_pat:pat = $fut_ident:ident => $body:expr; $($tail:tt)*)
-        labels $labels:tt
-    ) => {
-        compile_error!("did you mean to put a comma instead of the semicolon after `}`?")
-    };
-
-    // Don't require a comma after the case if it has a proper block.
-    (@parse_list
-        cases($($head:tt)*)
-        tokens($kind:ident $fut_pat:pat = $fut_ident:ident => $body:block $($tail:tt)*)
-        labels $labels:tt
-    ) => {
-        $crate::select!(
-            @parse_list
-            cases($($head)* $kind $fut_pat = $fut_ident => { $body },)
-            tokens($($tail)*)
-            labels $labels
-        )
-    };
-    // Only one case remains.
-    (@parse_list
-        cases($($head:tt)*)
-        tokens($kind:ident $fut_pat:pat = $fut_ident:ident => $body:expr)
-        labels $labels:tt
-    ) => {
-        $crate::select!(
-            @parse_list
-            cases($($head)* $kind $fut_pat = $fut_ident => { $body },)
-            tokens()
-            labels $labels
-        )
-    };
-    // Diagnose and print an error.
-    (@parse_list
-        cases($($head:tt)*)
-        tokens($(tail:tt)*)
-        labels $labels:tt
-    ) => {
-        $crate::select!(@parse_list_error1 $($tail)*)
-    };
-    // Stage 1: check the case type.
-    (@parse_list_error1 default $($tail:tt)*) => {
-        $crate::select!(@parse_list_error2 $($tail)*)
-    };
-    (@parse_list_error1 complete $($tail:tt)*) => {
-        $crate::select!(@parse_list_error2 $($tail)*)
-    };
-    (@parse_list_error1 $fut_pat:pat = $fut_expr:ident $($tail:tt)*) => {
-        $crate::select!(@parse_list_error2 $($tail)*)
-    };
-    (@parse_list_error1 __DEFAULT _ = __DEFAULT_IDENT $($tail:tt)*) => {
-        $crate::select!(@parse_list_error2 $($tail)*)
-    };
-    (@parse_list_error1 __COMPLETE _ = __COMPLETE_IDENT $($tail:tt)*) => {
-        $crate::select!(@parse_list_error2 $($tail)*)
-    };
-    (@parse_list error1 __FUTURE $fut_pat:pat = $fut_ident:ident $($tail:tt)*) => {
-        $crate::select!(@parse_list_error2 => $($tail)*)
-    };
-    (@parse_list_error1 $t:tt $($tail:tt)*) => {
-        compile_error!(concat!(
-            "expected one of `pattern = future => expr,`, `default => expr,`, or `complete => expr`, found `",
-            stringify!($t),
-            "`",
-        ))
-    };
-    (@parse_list_error_2 => $body:expr; $($tail:tt)*) => {
-        compile_error!(concat!(
-            "did you mean to put a comma instead of the semicolon after `",
-            stringify!($body),
-            "`?",
-        ))
-    };
-    (@parse_list_error_2 => $($tail:tt)*) => {
-        compile_error!("expected expression followed by comma after `=>`")
-    };
-    (@parse_list_error_2 $($tail:tt)*) => {
-        compile_error!("expected `=>` after select! case")
-    };
-    (@parse_list_error2 $($tail:tt)*) => {
-        compile_error!("invalid syntax")
-    };
-
-    // Success! all cases were parsed
-    (@parse_case
-        futs $fut:tt
-        default $default:tt
-        complete $complete:tt
-        cases ()
-    ) => {
-        $crate::select!(
-            @codegen
-            futs $fut
-            default $default
-            complete $complete
-        )
-    };
-
-    // Parse `default => { ... }`
-    (@parse_case
-        futs $fut:tt
-        default ()
-        complete $complete:tt
-        cases (__DEFAULT $pat:pat = __DEFAULT_IDENT => $body:tt, $($tail:tt)*)
-    ) => {
-        $crate::select!(
-            @parse_case
-            futs $fut
-            default ($body)
-            complete $complete
-            cases ($($tail)*)
-        )
-    };
-    // Error on multiple `default`s
-    (@parse_case
-        futs $fut:tt
-        default $default:tt
-        complete $complete:tt
-        cases (__DEFAULT $pat:pat = __DEFAULT_IDENT => $body:tt, $($tail:tt)*)
-    ) => {
-        compile_error!("there can only be one `default` case in a `select!` block")
-    };
-    // Parse `complete => { ... }`
-    (@parse_case
-        futs $fut:tt
-        default $default:tt
-        complete ()
-        cases (__COMPLETE $pat:pat = __COMPLETE_IDENT => $body:tt, $($tail:tt)*)
-    ) => {
-        $crate::select!(
-            @parse_case
-            futs $fut
-            default $default
-            complete ($body)
-            cases ($($tail)*)
-        )
-    };
-    // Error on multiple `complete`s
-    (@parse_case
-        futs $fut:tt
-        default $default:tt
-        complete $complete:tt
-        cases (__COMPLETE $pat:pat = __COMPLETE_IDENT => $body:tt, $($tail:tt)*)
-    ) => {
-        compile_error!("there can only be one `complete` case in a `select!` block")
-    };
-    // Parse `pat = ident => { ... }`
-    (@parse_case
-        futs ($($futs:tt)*)
-        default $default:tt
-        complete $complete:tt
-        cases (__FUTURE $pat:pat = $ident:ident => $body:tt, $($tail:tt)*)
-    ) => {
-        $crate::select!(
-            @parse_case
-            futs ($($futs)* $pat = $ident => $body,)
-            default $default
-            complete $complete
-            cases ($($tail)*)
-        )
-    };
-    // Catch errors in case parsing
-    (@parse_case
-        futs $fut:tt
-        default $default:tt
-        complete $complete:tt
-        cases ($case:ident $args:tt => $body:tt, $($tail:tt)*)
-    ) => {
-        compile_error!(concat!(
-            "expected one of `pattern = future => expr,`, `default`, or `complete`, found `",
-            stringify!($case), stringify!($args),
-            "`",
-        ))
-    };
-
-    // Catches a bug within this macro (should not happen).
-    (@$($tokens:tt)*) => {
-        compile_error!(concat!(
-            "internal error in futures select macro: ",
-            stringify!(@$($tokens)*),
-        ))
-    };
-
-    ($($tokens:tt)*) => {
-        $crate::select!(
-            @parse_list
-            cases()
-            tokens($($tokens)*)
-            labels(
-                case1
-                case2
-                case3
-                case4
-                case5
-                case6
-                case7
-                case8
-                case9
-                case10
-                case11
-                case12
-                case13
-                case14
-                case15
-                case16
-                case17
-                case18
-                case19
-                case20
-                case21
-                case22
-                case23
-                case24
-                case25
-                case26
-                case27
-                case28
-                case29
-                case30
-                case31
-            )
-        )
-    };
-}
diff --git a/rustc_deps/vendor/futures-util-preview/src/async_await/select_mod.rs b/rustc_deps/vendor/futures-util-preview/src/async_await/select_mod.rs
new file mode 100644
index 0000000..5519cff
--- /dev/null
+++ b/rustc_deps/vendor/futures-util-preview/src/async_await/select_mod.rs
@@ -0,0 +1,96 @@
+//! The `select` macro.
+
+use proc_macro_hack::proc_macro_hack;
+
+#[doc(hidden)]
+#[macro_export]
+macro_rules! document_select_macro {
+    ($item:item) => {
+        /// Polls multiple futures and streams simultaneously, executing the branch
+        /// for the future that finishes first. Futures passed to
+        /// `select!` must be `Unpin` and implement `FusedFuture`.
+        /// Futures and streams which are not already fused can be fused using the
+        /// `.fuse()` method. Note, though, that fusing a future or stream directly
+        /// in the call to `select!` will not be enough to prevent it from being
+        /// polled after completion if the `select!` call is in a loop, so when
+        /// `select!`ing in a loop, users should take care to `fuse()` outside of
+        /// the loop.
+        ///
+        /// `select!` can select over futures with different output types, but each
+        /// branch has to have the same return type.
+        ///
+        /// This macro is only usable inside of async functions, closures, and blocks.
+        ///
+        /// # Examples
+        ///
+        /// ```
+        /// #![feature(async_await, await_macro, futures_api)]
+        /// # futures::executor::block_on(async {
+        /// use futures::future::{self, FutureExt};
+        /// use futures::select;
+        /// let mut a = future::ready(4);
+        /// let mut b = future::empty::<()>();
+        ///
+        /// let res = select! {
+        ///     a_res = a => a_res + 1,
+        ///     _ = b => 0,
+        /// };
+        /// assert_eq!(res, 5);
+        /// # });
+        /// ```
+        ///
+        /// ```
+        /// #![feature(async_await, await_macro, futures_api)]
+        /// # futures::executor::block_on(async {
+        /// use futures::future::{self, FutureExt};
+        /// use futures::stream::{self, StreamExt};
+        /// use futures::select;
+        /// let mut st = stream::iter(vec![2]).fuse();
+        /// let mut fut = future::empty::<()>();
+        ///
+        /// select! {
+        ///     x = st.next() => assert_eq!(Some(2), x),
+        ///     _ = fut => panic!(),
+        /// };
+        /// # });
+        /// ```
+        ///
+        /// `select` also accepts a `complete` branch and a `default` branch.
+        /// `complete` will run if all futures and streams have already been
+        /// exhausted. `default` will run if no futures or streams are
+        /// immediately ready. `complete` takes priority over `default` in
+        /// the case where all futures have completed.
+        ///
+        /// ```
+        /// #![feature(async_await, await_macro, futures_api)]
+        /// # futures::executor::block_on(async {
+        /// use futures::future::{self, FutureExt};
+        /// use futures::select;
+        /// let mut a_fut = future::ready(4);
+        /// let mut b_fut = future::ready(6);
+        /// let mut total = 0;
+        ///
+        /// loop {
+        ///     select! {
+        ///         a = a_fut => total += a,
+        ///         b = b_fut => total += b,
+        ///         complete => break,
+        ///         default => panic!(), // never runs (futures run first, then complete)
+        ///     };
+        /// }
+        /// assert_eq!(total, 10);
+        /// # });
+        /// ```
+        ///
+        /// Note that the futures that have been matched over can still be mutated
+        /// from inside the `select!` block's branches. This can be used to implement
+        /// more complex behavior such as timer resets or writing into the head of
+        /// a stream.
+        $item
+    }
+}
+
+document_select_macro! {
+    #[proc_macro_hack]
+    pub use futures_select_macro::select;
+}
diff --git a/rustc_deps/vendor/futures-util-preview/src/compat/compat01as03.rs b/rustc_deps/vendor/futures-util-preview/src/compat/compat01as03.rs
index 1028d30..fefb881 100644
--- a/rustc_deps/vendor/futures-util-preview/src/compat/compat01as03.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/compat/compat01as03.rs
@@ -6,9 +6,9 @@
 };
 use futures_01::{Async as Async01, Future as Future01, Stream as Stream01};
 use futures_core::{task as task03, Future as Future03, Stream as Stream03};
-use std::mem;
-use std::task::{LocalWaker, Waker};
-use std::pin::{Pin, Unpin};
+use std::marker::Unpin;
+use std::pin::Pin;
+use std::task::LocalWaker;
 
 /// Converts a futures 0.1 Future, Stream, AsyncRead, or AsyncWrite
 /// object to a futures 0.3-compatible version,
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/abortable.rs b/rustc_deps/vendor/futures-util-preview/src/future/abortable.rs
index f5f1247..aeb4bdb 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/abortable.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/abortable.rs
@@ -129,7 +129,7 @@
         }
 
         // attempt to complete the future
-        if let Poll::Ready(x) = self.future().poll(lw) {
+        if let Poll::Ready(x) = self.as_mut().future().poll(lw) {
             return Poll::Ready(Ok(x))
         }
 
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/catch_unwind.rs b/rustc_deps/vendor/futures-util-preview/src/future/catch_unwind.rs
index 2eb7c65..d6eb124 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/catch_unwind.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/catch_unwind.rs
@@ -28,7 +28,7 @@
 {
     type Output = Result<Fut::Output, Box<dyn Any + Send>>;
 
-    fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Self::Output> {
+    fn poll(self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Self::Output> {
         match catch_unwind(AssertUnwindSafe(|| self.future().poll(lw))) {
             Ok(res) => res.map(Ok),
             Err(e) => Poll::Ready(Err(e))
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/chain.rs b/rustc_deps/vendor/futures-util-preview/src/future/chain.rs
index c14eb27..b40923e 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/chain.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/chain.rs
@@ -33,8 +33,8 @@
     {
         let mut f = Some(f);
 
-        // Safe to call `get_mut_unchecked` because we won't move the futures.
-        let this = unsafe { Pin::get_mut_unchecked(self) };
+        // Safe to call `get_unchecked_mut` because we won't move the futures.
+        let this = unsafe { Pin::get_unchecked_mut(self) };
 
         loop {
             let (output, data) = match this {
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/flatten.rs b/rustc_deps/vendor/futures-util-preview/src/future/flatten.rs
index ccb91cf..7137e5c 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/flatten.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/flatten.rs
@@ -55,7 +55,7 @@
 {
     type Output = <Fut::Output as Future>::Output;
 
-    fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Self::Output> {
+    fn poll(self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Self::Output> {
         self.state().poll(lw, |a, ()| a)
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/flatten_stream.rs b/rustc_deps/vendor/futures-util-preview/src/future/flatten_stream.rs
index c4a3d64..ab446cb 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/flatten_stream.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/flatten_stream.rs
@@ -61,7 +61,7 @@
     fn poll_next(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Option<Self::Item>> {
         loop {
             // safety: data is never moved via the resulting &mut reference
-            let stream = match &mut unsafe { Pin::get_mut_unchecked(self.as_mut()) }.state {
+            let stream = match &mut unsafe { Pin::get_unchecked_mut(self.as_mut()) }.state {
                 State::Future(f) => {
                     // safety: the future we're re-pinning here will never be moved;
                     // it will just be polled, then dropped in place
@@ -88,7 +88,7 @@
             unsafe {
                 // safety: we use the &mut only for an assignment, which causes
                 // only an in-place drop
-                Pin::get_mut_unchecked(self.as_mut()).state = State::Stream(stream);
+                Pin::get_unchecked_mut(self.as_mut()).state = State::Stream(stream);
             }
         }
     }
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/fuse.rs b/rustc_deps/vendor/futures-util-preview/src/future/fuse.rs
index a0be9eb..cee7e59 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/fuse.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/fuse.rs
@@ -39,7 +39,7 @@
 
     fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Fut::Output> {
         // safety: we use this &mut only for matching, not for movement
-        let v = match self.future().as_pin_mut() {
+        let v = match self.as_mut().future().as_pin_mut() {
             Some(fut) => {
                 // safety: this re-pinned future will never move before being dropped
                 match fut.poll(lw) {
@@ -50,7 +50,7 @@
             None => return Poll::Pending,
         };
 
-        Pin::set(self.future(), None);
+        Pin::set(self.as_mut().future(), None);
         Poll::Ready(v)
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/inspect.rs b/rustc_deps/vendor/futures-util-preview/src/future/inspect.rs
index 45a9131..475f446 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/inspect.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/inspect.rs
@@ -39,12 +39,12 @@
     type Output = Fut::Output;
 
     fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Fut::Output> {
-        let e = match self.future().poll(lw) {
+        let e = match self.as_mut().future().poll(lw) {
             Poll::Pending => return Poll::Pending,
             Poll::Ready(e) => e,
         };
 
-        let f = self.f().take().expect("cannot poll Inspect twice");
+        let f = self.as_mut().f().take().expect("cannot poll Inspect twice");
         f(&e);
         Poll::Ready(e)
     }
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/into_stream.rs b/rustc_deps/vendor/futures-util-preview/src/future/into_stream.rs
index 001b9eb..0b18355 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/into_stream.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/into_stream.rs
@@ -26,7 +26,7 @@
     type Item = Fut::Output;
 
     fn poll_next(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Option<Self::Item>> {
-        let v = match self.future().as_pin_mut() {
+        let v = match self.as_mut().future().as_pin_mut() {
             Some(fut) => {
                 match fut.poll(lw) {
                     Poll::Pending => return Poll::Pending,
@@ -36,7 +36,7 @@
             None => return Poll::Ready(None),
         };
 
-        Pin::set(self.future(), None);
+        Pin::set(self.as_mut().future(), None);
         Poll::Ready(Some(v))
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/join.rs b/rustc_deps/vendor/futures-util-preview/src/future/join.rs
index 633beaf..97394dc 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/join.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/join.rs
@@ -52,13 +52,13 @@
             ) -> Poll<Self::Output> {
                 let mut all_done = true;
                 $(
-                    if self.$Fut().poll(lw).is_pending() {
+                    if self.as_mut().$Fut().poll(lw).is_pending() {
                         all_done = false;
                     }
                 )*
 
                 if all_done {
-                    Poll::Ready(($(self.$Fut().take_output().unwrap()), *))
+                    Poll::Ready(($(self.as_mut().$Fut().take_output().unwrap()), *))
                 } else {
                     Poll::Pending
                 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/join_all.rs b/rustc_deps/vendor/futures-util-preview/src/future/join_all.rs
index a03a38e..0584373 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/join_all.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/join_all.rs
@@ -4,8 +4,9 @@
 use std::fmt;
 use std::future::Future;
 use std::iter::FromIterator;
+use std::marker::Unpin;
 use std::mem;
-use std::pin::{Pin, Unpin};
+use std::pin::Pin;
 use std::prelude::v1::*;
 use std::task::Poll;
 
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/map.rs b/rustc_deps/vendor/futures-util-preview/src/future/map.rs
index 1c893ea..764d8da 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/map.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/map.rs
@@ -37,7 +37,7 @@
     type Output = T;
 
     fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<T> {
-        match self.future().poll(lw) {
+        match self.as_mut().future().poll(lw) {
             Poll::Pending => Poll::Pending,
             Poll::Ready(output) => {
                 let f = self.f().take()
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/maybe_done.rs b/rustc_deps/vendor/futures-util-preview/src/future/maybe_done.rs
index 1fe5a31..6860d66 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/maybe_done.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/maybe_done.rs
@@ -28,7 +28,7 @@
 /// # Examples
 ///
 /// ```
-/// #![feature(async_await, await_macro, futures_api, use_extern_macros, pin)]
+/// #![feature(async_await, await_macro, futures_api)]
 /// # futures::executor::block_on(async {
 /// use futures::future;
 /// use pin_utils::pin_mut;
@@ -54,7 +54,7 @@
     #[allow(clippy::needless_lifetimes)] // https://github.com/rust-lang/rust/issues/52675
     pub fn output_mut<'a>(self: Pin<&'a mut Self>) -> Option<&'a mut Fut::Output> {
         unsafe {
-            let this = Pin::get_mut_unchecked(self);
+            let this = Pin::get_unchecked_mut(self);
             match this {
                 MaybeDone::Done(res) => Some(res),
                 _ => None,
@@ -67,7 +67,7 @@
     #[inline]
     pub fn take_output(self: Pin<&mut Self>) -> Option<Fut::Output> {
         unsafe {
-            let this = Pin::get_mut_unchecked(self);
+            let this = Pin::get_unchecked_mut(self);
             match this {
                 MaybeDone::Done(_) => {},
                 MaybeDone::Future(_) | MaybeDone::Gone => return None,
@@ -95,7 +95,7 @@
 
     fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Self::Output> {
         let res = unsafe {
-            match Pin::get_mut_unchecked(self.as_mut()) {
+            match Pin::get_unchecked_mut(self.as_mut()) {
                 MaybeDone::Future(a) => {
                     if let Poll::Ready(res) = Pin::new_unchecked(a).poll(lw) {
                         res
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/mod.rs b/rustc_deps/vendor/futures-util-preview/src/future/mod.rs
index 78d00bd..1aa1ad6 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/mod.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/mod.rs
@@ -654,7 +654,7 @@
     fn boxed(self) -> Pin<Box<Self>>
         where Self: Sized
     {
-        Box::pinned(self)
+        Box::pin(self)
     }
 
     /// Turns a `Future` into a `TryFuture` with `Error = ()`.
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/option.rs b/rustc_deps/vendor/futures-util-preview/src/future/option.rs
index 11afa06..8f21d5a 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/option.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/option.rs
@@ -37,7 +37,7 @@
     type Output = Option<F::Output>;
 
     fn poll(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker
     ) -> Poll<Self::Output> {
         match self.option().as_pin_mut() {
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/remote_handle.rs b/rustc_deps/vendor/futures-util-preview/src/future/remote_handle.rs
index d0e819d..1b03dd1 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/remote_handle.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/remote_handle.rs
@@ -76,28 +76,27 @@
 impl<Fut: Future> Remote<Fut> {
     unsafe_pinned!(future: CatchUnwind<AssertUnwindSafe<Fut>>);
     unsafe_unpinned!(tx: Option<Sender<SendMsg<Fut>>>);
-    unsafe_unpinned!(keep_running: Arc<AtomicBool>);
 }
 
 impl<Fut: Future> Future for Remote<Fut> {
     type Output = ();
 
     fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<()> {
-        if let Poll::Ready(_) = self.tx().as_mut().unwrap().poll_cancel(lw) {
-            if !self.keep_running().load(Ordering::SeqCst) {
+        if let Poll::Ready(_) = self.as_mut().tx().as_mut().unwrap().poll_cancel(lw) {
+            if !self.keep_running.load(Ordering::SeqCst) {
                 // Cancelled, bail out
                 return Poll::Ready(())
             }
         }
 
-        let output = match self.future().poll(lw) {
+        let output = match self.as_mut().future().poll(lw) {
             Poll::Ready(output) => output,
             Poll::Pending => return Poll::Pending,
         };
 
         // if the receiving end has gone away then that's ok, we just ignore the
         // send error here.
-        drop(self.tx().take().unwrap().send(output));
+        drop(self.as_mut().tx().take().unwrap().send(output));
         Poll::Ready(())
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/then.rs b/rustc_deps/vendor/futures-util-preview/src/future/then.rs
index 9450b54..2de497e 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/then.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/then.rs
@@ -40,6 +40,6 @@
     type Output = Fut2::Output;
 
     fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Fut2::Output> {
-        self.chain().poll(lw, |output, f| f(output))
+        self.as_mut().chain().poll(lw, |output, f| f(output))
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/future/unit_error.rs b/rustc_deps/vendor/futures-util-preview/src/future/unit_error.rs
index 8f97bab..15e8e39 100644
--- a/rustc_deps/vendor/futures-util-preview/src/future/unit_error.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/future/unit_error.rs
@@ -33,7 +33,7 @@
 {
     type Output = Result<T, ()>;
 
-    fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Result<T, ()>> {
+    fn poll(self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Result<T, ()>> {
         self.future().poll(lw).map(Ok)
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/io/split.rs b/rustc_deps/vendor/futures-util-preview/src/io/split.rs
index 18c4330..c808dd3 100644
--- a/rustc_deps/vendor/futures-util-preview/src/io/split.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/io/split.rs
@@ -26,7 +26,7 @@
     match lock.poll_lock(lw) {
         // Safety: the value behind the bilock used by `ReadHalf` and `WriteHalf` is never exposed
         // as a `Pin<&mut T>` anywhere other than here as a way to get to `&mut T`.
-        Poll::Ready(mut l) => f(unsafe { Pin::get_mut_unchecked(l.as_pin_mut()) }, lw),
+        Poll::Ready(mut l) => f(unsafe { Pin::get_unchecked_mut(l.as_pin_mut()) }, lw),
         Poll::Pending => Poll::Pending,
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/lib.rs b/rustc_deps/vendor/futures-util-preview/src/lib.rs
index da27572..0157f54 100644
--- a/rustc_deps/vendor/futures-util-preview/src/lib.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/lib.rs
@@ -1,22 +1,25 @@
 //! Combinators and utilities for working with `Future`s, `Stream`s, `Sink`s,
 //! and the `AsyncRead` and `AsyncWrite` traits.
 
-#![feature(async_await, pin, arbitrary_self_types, futures_api, unsized_locals)]
-#![cfg_attr(feature = "std", feature(await_macro))]
+#![feature(futures_api)]
+#![cfg_attr(feature = "std", feature(async_await, await_macro))]
 #![cfg_attr(feature = "nightly", feature(cfg_target_has_atomic))]
 
 #![cfg_attr(not(feature = "std"), no_std)]
 #![warn(missing_docs, missing_debug_implementations)]
 #![deny(bare_trait_objects)]
 
-#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.10/futures_util")]
+#![doc(html_root_url = "https://rust-lang-nursery.github.io/futures-api-docs/0.3.0-alpha.11/futures_util")]
 
 #[macro_use]
 mod macros;
 
 #[cfg(feature = "std")]
 #[macro_use]
+#[doc(hidden)]
 pub mod async_await;
+#[cfg(feature = "std")]
+pub use self::async_await::*;
 
 #[cfg(feature = "std")]
 #[doc(hidden)]
@@ -32,28 +35,28 @@
 macro_rules! delegate_sink {
     ($field:ident) => {
         fn poll_ready(
-            mut self: Pin<&mut Self>,
+            self: Pin<&mut Self>,
             lw: &$crate::core_reexport::task::LocalWaker,
         ) -> $crate::core_reexport::task::Poll<Result<(), Self::SinkError>> {
             self.$field().poll_ready(lw)
         }
 
         fn start_send(
-            mut self: Pin<&mut Self>,
+            self: Pin<&mut Self>,
             item: Self::SinkItem
         ) -> Result<(), Self::SinkError> {
             self.$field().start_send(item)
         }
 
         fn poll_flush(
-            mut self: Pin<&mut Self>,
+            self: Pin<&mut Self>,
             lw: &$crate::core_reexport::task::LocalWaker
         ) -> $crate::core_reexport::task::Poll<Result<(), Self::SinkError>> {
             self.$field().poll_flush(lw)
         }
 
         fn poll_close(
-            mut self: Pin<&mut Self>,
+            self: Pin<&mut Self>,
             lw: &$crate::core_reexport::task::LocalWaker
         ) -> $crate::core_reexport::task::Poll<Result<(), Self::SinkError>> {
             self.$field().poll_close(lw)
diff --git a/rustc_deps/vendor/futures-util-preview/src/sink/buffer.rs b/rustc_deps/vendor/futures-util-preview/src/sink/buffer.rs
index fced850..9feccb7 100644
--- a/rustc_deps/vendor/futures-util-preview/src/sink/buffer.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/sink/buffer.rs
@@ -40,16 +40,16 @@
     }
 
     fn try_empty_buffer(
-        self: &mut Pin<&mut Self>,
+        mut self: Pin<&mut Self>,
         lw: &LocalWaker
     ) -> Poll<Result<(), Si::SinkError>> {
-        try_ready!(self.sink().poll_ready(lw));
-        while let Some(item) = self.buf().pop_front() {
-            if let Err(e) = self.sink().start_send(item) {
+        try_ready!(self.as_mut().sink().poll_ready(lw));
+        while let Some(item) = self.as_mut().buf().pop_front() {
+            if let Err(e) = self.as_mut().sink().start_send(item) {
                 return Poll::Ready(Err(e));
             }
             if !self.buf.is_empty() {
-                try_ready!(self.sink().poll_ready(lw));
+                try_ready!(self.as_mut().sink().poll_ready(lw));
             }
         }
         Poll::Ready(Ok(()))
@@ -60,7 +60,7 @@
 impl<S> Stream for Buffer<S> where S: Sink + Stream {
     type Item = S::Item;
 
-    fn poll_next(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Option<S::Item>> {
+    fn poll_next(self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Option<S::Item>> {
         self.sink().poll_next(lw)
     }
 }
@@ -73,15 +73,15 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
-        if *self.capacity() == 0 {
-            return self.sink().poll_ready(lw);
+        if self.capacity == 0 {
+            return self.as_mut().sink().poll_ready(lw);
         }
 
-        if let Poll::Ready(Err(e)) = self.try_empty_buffer(lw) {
+        if let Poll::Ready(Err(e)) = self.as_mut().try_empty_buffer(lw) {
             return Poll::Ready(Err(e));
         }
 
-        if self.buf().len() >= *self.capacity() {
+        if self.buf.len() >= self.capacity {
             Poll::Pending
         } else {
             Poll::Ready(Ok(()))
@@ -92,10 +92,10 @@
         mut self: Pin<&mut Self>,
         item: Self::SinkItem,
     ) -> Result<(), Self::SinkError> {
-        if *self.capacity() == 0 {
-            self.sink().start_send(item)
+        if self.capacity == 0 {
+            self.as_mut().sink().start_send(item)
         } else {
-            self.buf().push_back(item);
+            self.as_mut().buf().push_back(item);
             Ok(())
         }
     }
@@ -104,17 +104,17 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
-        try_ready!(self.try_empty_buffer(lw));
-        debug_assert!(self.buf().is_empty());
-        self.sink().poll_flush(lw)
+        try_ready!(self.as_mut().try_empty_buffer(lw));
+        debug_assert!(self.as_mut().buf().is_empty());
+        self.as_mut().sink().poll_flush(lw)
     }
 
     fn poll_close(
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
-        try_ready!(self.try_empty_buffer(lw));
-        debug_assert!(self.buf().is_empty());
-        self.sink().poll_close(lw)
+        try_ready!(self.as_mut().try_empty_buffer(lw));
+        debug_assert!(self.as_mut().buf().is_empty());
+        self.as_mut().sink().poll_close(lw)
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/sink/err_into.rs b/rustc_deps/vendor/futures-util-preview/src/sink/err_into.rs
index 8205c72..99609d5 100644
--- a/rustc_deps/vendor/futures-util-preview/src/sink/err_into.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/sink/err_into.rs
@@ -62,7 +62,7 @@
     type Item = S::Item;
 
     fn poll_next(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<S::Item>> {
         self.sink().poll_next(lw)
diff --git a/rustc_deps/vendor/futures-util-preview/src/sink/fanout.rs b/rustc_deps/vendor/futures-util-preview/src/sink/fanout.rs
index 6b9a844..5bc6422 100644
--- a/rustc_deps/vendor/futures-util-preview/src/sink/fanout.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/sink/fanout.rs
@@ -54,8 +54,8 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
-        let sink1_ready = try_poll!(self.sink1().poll_ready(lw)).is_ready();
-        let sink2_ready = try_poll!(self.sink2().poll_ready(lw)).is_ready();
+        let sink1_ready = try_poll!(self.as_mut().sink1().poll_ready(lw)).is_ready();
+        let sink2_ready = try_poll!(self.as_mut().sink2().poll_ready(lw)).is_ready();
         let ready = sink1_ready && sink2_ready;
         if ready { Poll::Ready(Ok(())) } else { Poll::Pending }
     }
@@ -64,8 +64,8 @@
         mut self: Pin<&mut Self>,
         item: Self::SinkItem,
     ) -> Result<(), Self::SinkError> {
-        self.sink1().start_send(item.clone())?;
-        self.sink2().start_send(item)?;
+        self.as_mut().sink1().start_send(item.clone())?;
+        self.as_mut().sink2().start_send(item)?;
         Ok(())
     }
 
@@ -73,8 +73,8 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
-        let sink1_ready = try_poll!(self.sink1().poll_flush(lw)).is_ready();
-        let sink2_ready = try_poll!(self.sink2().poll_flush(lw)).is_ready();
+        let sink1_ready = try_poll!(self.as_mut().sink1().poll_flush(lw)).is_ready();
+        let sink2_ready = try_poll!(self.as_mut().sink2().poll_flush(lw)).is_ready();
         let ready = sink1_ready && sink2_ready;
         if ready { Poll::Ready(Ok(())) } else { Poll::Pending }
     }
@@ -83,8 +83,8 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
-        let sink1_ready = try_poll!(self.sink1().poll_close(lw)).is_ready();
-        let sink2_ready = try_poll!(self.sink2().poll_close(lw)).is_ready();
+        let sink1_ready = try_poll!(self.as_mut().sink1().poll_close(lw)).is_ready();
+        let sink2_ready = try_poll!(self.as_mut().sink2().poll_close(lw)).is_ready();
         let ready = sink1_ready && sink2_ready;
         if ready { Poll::Ready(Ok(())) } else { Poll::Pending }
     }
diff --git a/rustc_deps/vendor/futures-util-preview/src/sink/map_err.rs b/rustc_deps/vendor/futures-util-preview/src/sink/map_err.rs
index 7dab01e..4bb7f4e 100644
--- a/rustc_deps/vendor/futures-util-preview/src/sink/map_err.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/sink/map_err.rs
@@ -47,7 +47,7 @@
         self.sink
     }
 
-    fn take_f(mut self: Pin<&mut Self>) -> F {
+    fn take_f(self: Pin<&mut Self>) -> F {
         self.f().take().expect("polled MapErr after completion")
     }
 }
@@ -64,7 +64,7 @@
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
         #[allow(clippy::redundant_closure)] // https://github.com/rust-lang-nursery/rust-clippy/issues/1439
-        self.sink().poll_ready(lw).map_err(|e| self.take_f()(e))
+        self.as_mut().sink().poll_ready(lw).map_err(|e| self.as_mut().take_f()(e))
     }
 
     fn start_send(
@@ -72,7 +72,7 @@
         item: Self::SinkItem,
     ) -> Result<(), Self::SinkError> {
         #[allow(clippy::redundant_closure)] // https://github.com/rust-lang-nursery/rust-clippy/issues/1439
-        self.sink().start_send(item).map_err(|e| self.take_f()(e))
+        self.as_mut().sink().start_send(item).map_err(|e| self.as_mut().take_f()(e))
     }
 
     fn poll_flush(
@@ -80,7 +80,7 @@
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
         #[allow(clippy::redundant_closure)] // https://github.com/rust-lang-nursery/rust-clippy/issues/1439
-        self.sink().poll_flush(lw).map_err(|e| self.take_f()(e))
+        self.as_mut().sink().poll_flush(lw).map_err(|e| self.as_mut().take_f()(e))
     }
 
     fn poll_close(
@@ -88,7 +88,7 @@
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
         #[allow(clippy::redundant_closure)] // https://github.com/rust-lang-nursery/rust-clippy/issues/1439
-        self.sink().poll_close(lw).map_err(|e| self.take_f()(e))
+        self.as_mut().sink().poll_close(lw).map_err(|e| self.as_mut().take_f()(e))
     }
 }
 
@@ -96,7 +96,7 @@
     type Item = S::Item;
 
     fn poll_next(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<S::Item>> {
         self.sink().poll_next(lw)
diff --git a/rustc_deps/vendor/futures-util-preview/src/sink/with.rs b/rustc_deps/vendor/futures-util-preview/src/sink/with.rs
index 0b22a4b..6a36068 100644
--- a/rustc_deps/vendor/futures-util-preview/src/sink/with.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/sink/with.rs
@@ -66,7 +66,7 @@
         self: Pin<&'a mut Self>,
     ) -> State<Pin<&'a mut Fut>, Pin<&'a mut T>> {
         unsafe {
-            match Pin::get_mut_unchecked(self) {
+            match Pin::get_unchecked_mut(self) {
                 State::Empty =>
                     State::Empty,
                 State::Process(fut) =>
@@ -87,7 +87,7 @@
     type Item = S::Item;
 
     fn poll_next(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<S::Item>> {
         self.sink().poll_next(lw)
@@ -119,19 +119,19 @@
     }
 
     fn poll(
-        self: &mut Pin<&mut Self>,
+        mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), E>> {
-        let buffered = match self.state().as_pin_mut() {
+        let buffered = match self.as_mut().state().as_pin_mut() {
             State::Empty => return Poll::Ready(Ok(())),
             State::Process(fut) => Some(try_ready!(fut.poll(lw))),
             State::Buffered(_) => None,
         };
         if let Some(buffered) = buffered {
-            Pin::set(self.state(), State::Buffered(buffered));
+            self.as_mut().state().set(State::Buffered(buffered));
         }
-        if let State::Buffered(item) = unsafe { mem::replace(Pin::get_mut_unchecked(self.state()), State::Empty) } {
-            Poll::Ready(self.sink().start_send(item).map_err(Into::into))
+        if let State::Buffered(item) = unsafe { mem::replace(Pin::get_unchecked_mut(self.as_mut().state()), State::Empty) } {
+            Poll::Ready(self.as_mut().sink().start_send(item).map_err(Into::into))
         } else {
             unreachable!()
         }
@@ -148,7 +148,7 @@
     type SinkError = E;
 
     fn poll_ready(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
         self.poll(lw)
@@ -158,8 +158,8 @@
         mut self: Pin<&mut Self>,
         item: Self::SinkItem,
     ) -> Result<(), Self::SinkError> {
-        let item = (self.f())(item);
-        Pin::set(self.state(), State::Process(item));
+        let item = (self.as_mut().f())(item);
+        self.as_mut().state().set(State::Process(item));
         Ok(())
     }
 
@@ -167,8 +167,8 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
-        try_ready!(self.poll(lw));
-        try_ready!(self.sink().poll_flush(lw));
+        try_ready!(self.as_mut().poll(lw));
+        try_ready!(self.as_mut().sink().poll_flush(lw));
         Poll::Ready(Ok(()))
     }
 
@@ -176,8 +176,8 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Result<(), Self::SinkError>> {
-        try_ready!(self.poll(lw));
-        try_ready!(self.sink().poll_close(lw));
+        try_ready!(self.as_mut().poll(lw));
+        try_ready!(self.as_mut().sink().poll_close(lw));
         Poll::Ready(Ok(()))
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/sink/with_flat_map.rs b/rustc_deps/vendor/futures-util-preview/src/sink/with_flat_map.rs
index b74f0d2..11f3669 100644
--- a/rustc_deps/vendor/futures-util-preview/src/sink/with_flat_map.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/sink/with_flat_map.rs
@@ -79,7 +79,7 @@
         lw: &LocalWaker,
     ) -> Poll<Result<(), Si::SinkError>> {
         let WithFlatMap { sink, stream, buffer, .. } =
-            unsafe { Pin::get_mut_unchecked(self) };
+            unsafe { Pin::get_unchecked_mut(self) };
         let mut sink = unsafe { Pin::new_unchecked(sink) };
         let mut stream = unsafe { Pin::new_unchecked(stream) };
 
@@ -115,7 +115,7 @@
 {
     type Item = S::Item;
     fn poll_next(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<S::Item>> {
         self.sink().poll_next(lw)
@@ -142,9 +142,9 @@
         mut self: Pin<&mut Self>,
         item: Self::SinkItem,
     ) -> Result<(), Self::SinkError> {
-        assert!(self.stream().is_none());
-        let stream = (self.f())(item);
-        Pin::set(self.stream(), Some(stream));
+        assert!(self.stream.is_none());
+        let stream = (self.as_mut().f())(item);
+        self.stream().set(Some(stream));
         Ok(())
     }
 
@@ -154,7 +154,7 @@
     ) -> Poll<Result<(), Self::SinkError>> {
         match self.as_mut().try_empty_stream(lw) {
             Poll::Pending => Poll::Pending,
-            Poll::Ready(Ok(())) => self.sink().poll_flush(lw),
+            Poll::Ready(Ok(())) => self.as_mut().sink().poll_flush(lw),
             Poll::Ready(Err(e)) => Poll::Ready(Err(e)),
         }
     }
@@ -165,7 +165,7 @@
     ) -> Poll<Result<(), Self::SinkError>> {
         match self.as_mut().try_empty_stream(lw) {
             Poll::Pending => Poll::Pending,
-            Poll::Ready(Ok(())) => self.sink().poll_close(lw),
+            Poll::Ready(Ok(())) => self.as_mut().sink().poll_close(lw),
             Poll::Ready(Err(e)) => Poll::Ready(Err(e)),
         }
     }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/buffer_unordered.rs b/rustc_deps/vendor/futures-util-preview/src/stream/buffer_unordered.rs
index 9cd6a10..17ce169 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/buffer_unordered.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/buffer_unordered.rs
@@ -113,14 +113,14 @@
         // First up, try to spawn off as many futures as possible by filling up
         // our slab of futures.
         while self.in_progress_queue.len() < self.max {
-            match self.stream().poll_next(lw) {
-                Poll::Ready(Some(fut)) => self.in_progress_queue().push(fut),
+            match self.as_mut().stream().poll_next(lw) {
+                Poll::Ready(Some(fut)) => self.as_mut().in_progress_queue().push(fut),
                 Poll::Ready(None) | Poll::Pending => break,
             }
         }
 
         // Attempt to pull the next value from the in_progress_queue
-        match Pin::new(self.in_progress_queue()).poll_next(lw) {
+        match Pin::new(self.as_mut().in_progress_queue()).poll_next(lw) {
             x @ Poll::Pending | x @ Poll::Ready(Some(_)) => return x,
             Poll::Ready(None) => {}
         }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/buffered.rs b/rustc_deps/vendor/futures-util-preview/src/stream/buffered.rs
index 7354998..be31c9e 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/buffered.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/buffered.rs
@@ -109,14 +109,14 @@
         // Try to spawn off as many futures as possible by filling up
         // our in_progress_queue of futures.
         while self.in_progress_queue.len() < self.max {
-            match self.stream().poll_next(lw) {
-                Poll::Ready(Some(fut)) => self.in_progress_queue().push(fut),
+            match self.as_mut().stream().poll_next(lw) {
+                Poll::Ready(Some(fut)) => self.as_mut().in_progress_queue().push(fut),
                 Poll::Ready(None) | Poll::Pending => break,
             }
         }
 
         // Attempt to pull the next value from the in_progress_queue
-        let res = Pin::new(self.in_progress_queue()).poll_next(lw);
+        let res = Pin::new(self.as_mut().in_progress_queue()).poll_next(lw);
         if let Some(val) = ready!(res) {
             return Poll::Ready(Some(val))
         }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/catch_unwind.rs b/rustc_deps/vendor/futures-util-preview/src/stream/catch_unwind.rs
index 837c55c..9e153f8 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/catch_unwind.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/catch_unwind.rs
@@ -33,17 +33,17 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<Self::Item>> {
-        if *self.caught_unwind() {
+        if *self.as_mut().caught_unwind() {
             Poll::Ready(None)
         } else {
             let res = catch_unwind(AssertUnwindSafe(|| {
-                self.stream().poll_next(lw)
+                self.as_mut().stream().poll_next(lw)
             }));
 
             match res {
                 Ok(poll) => poll.map(|opt| opt.map(Ok)),
                 Err(e) => {
-                    *self.caught_unwind() = true;
+                    *self.as_mut().caught_unwind() = true;
                     Poll::Ready(Some(Err(e)))
                 },
             }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/chain.rs b/rustc_deps/vendor/futures-util-preview/src/stream/chain.rs
index 58675cb..1ee79f5 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/chain.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/chain.rs
@@ -46,12 +46,12 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<Self::Item>> {
-        if let Some(first) = self.first().as_pin_mut() {
+        if let Some(first) = self.as_mut().first().as_pin_mut() {
             if let Some(item) = ready!(first.poll_next(lw)) {
                 return Poll::Ready(Some(item))
             }
         }
-        Pin::set(self.first(), None);
-        self.second().poll_next(lw)
+        self.as_mut().first().set(None);
+        self.as_mut().second().poll_next(lw)
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/chunks.rs b/rustc_deps/vendor/futures-util-preview/src/stream/chunks.rs
index d79de21..d871b76 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/chunks.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/chunks.rs
@@ -35,8 +35,8 @@
     }
 
     fn take(mut self: Pin<&mut Self>) -> Vec<St::Item> {
-        let cap = self.items().capacity();
-        mem::replace(self.items(), Vec::with_capacity(cap))
+        let cap = self.items.capacity();
+        mem::replace(self.as_mut().items(), Vec::with_capacity(cap))
     }
 
     /// Acquires a reference to the underlying stream that this combinator is
@@ -72,24 +72,24 @@
     ) -> Poll<Option<Self::Item>> {
         let cap = self.items.capacity();
         loop {
-            match ready!(self.stream().poll_next(lw)) {
+            match ready!(self.as_mut().stream().poll_next(lw)) {
                 // Push the item into the buffer and check whether it is full.
                 // If so, replace our buffer with a new and empty one and return
                 // the full one.
                 Some(item) => {
-                    self.items().push(item);
-                    if self.items().len() >= cap {
-                        return Poll::Ready(Some(self.take()))
+                    self.as_mut().items().push(item);
+                    if self.items.len() >= cap {
+                        return Poll::Ready(Some(self.as_mut().take()))
                     }
                 }
 
                 // Since the underlying stream ran out of values, return what we
                 // have buffered, if we have anything.
                 None => {
-                    let last = if self.items().is_empty() {
+                    let last = if self.items.is_empty() {
                         None
                     } else {
-                        let full_buf = mem::replace(self.items(), Vec::new());
+                        let full_buf = mem::replace(self.as_mut().items(), Vec::new());
                         Some(full_buf)
                     };
 
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/collect.rs b/rustc_deps/vendor/futures-util-preview/src/stream/collect.rs
index 3e65b7f..e7db96fb 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/collect.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/collect.rs
@@ -24,7 +24,7 @@
     unsafe_unpinned!(collection: C);
 
     fn finish(mut self: Pin<&mut Self>) -> C {
-        mem::replace(self.collection(), Default::default())
+        mem::replace(self.as_mut().collection(), Default::default())
     }
 
     pub(super) fn new(stream: St) -> Collect<St, C> {
@@ -49,9 +49,9 @@
 
     fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<C> {
         loop {
-            match ready!(self.stream().poll_next(lw)) {
-                Some(e) => self.collection().extend(Some(e)),
-                None => return Poll::Ready(self.finish()),
+            match ready!(self.as_mut().stream().poll_next(lw)) {
+                Some(e) => self.as_mut().collection().extend(Some(e)),
+                None => return Poll::Ready(self.as_mut().finish()),
             }
         }
     }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/concat.rs b/rustc_deps/vendor/futures-util-preview/src/stream/concat.rs
index 202a0f6..2317ad0 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/concat.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/concat.rs
@@ -57,13 +57,13 @@
         mut self: Pin<&mut Self>, lw: &LocalWaker
     ) -> Poll<Self::Output> {
         loop {
-            match self.stream().poll_next(lw) {
+            match self.as_mut().stream().poll_next(lw) {
                 Poll::Pending => return Poll::Pending,
                 Poll::Ready(None) => {
-                    return Poll::Ready(self.accum().take().unwrap_or_default())
+                    return Poll::Ready(self.as_mut().accum().take().unwrap_or_default())
                 }
                 Poll::Ready(Some(e)) => {
-                    let accum = self.accum();
+                    let accum = self.as_mut().accum();
                     if let Some(a) = accum {
                         a.extend(e)
                     } else {
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/filter.rs b/rustc_deps/vendor/futures-util-preview/src/stream/filter.rs
index a8fbbc9..91892cf 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/filter.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/filter.rs
@@ -93,19 +93,19 @@
         lw: &LocalWaker,
     ) -> Poll<Option<St::Item>> {
         loop {
-            if self.pending_fut().as_pin_mut().is_none() {
-                let item = match ready!(self.stream().poll_next(lw)) {
+            if self.as_mut().pending_fut().as_pin_mut().is_none() {
+                let item = match ready!(self.as_mut().stream().poll_next(lw)) {
                     Some(e) => e,
                     None => return Poll::Ready(None),
                 };
-                let fut = (self.f())(&item);
-                Pin::set(self.pending_fut(), Some(fut));
-                *self.pending_item() = Some(item);
+                let fut = (self.as_mut().f())(&item);
+                self.as_mut().pending_fut().set(Some(fut));
+                *self.as_mut().pending_item() = Some(item);
             }
 
-            let yield_item = ready!(self.pending_fut().as_pin_mut().unwrap().poll(lw));
-            Pin::set(self.pending_fut(), None);
-            let item = self.pending_item().take().unwrap();
+            let yield_item = ready!(self.as_mut().pending_fut().as_pin_mut().unwrap().poll(lw));
+            self.as_mut().pending_fut().set(None);
+            let item = self.as_mut().pending_item().take().unwrap();
 
             if yield_item {
                 return Poll::Ready(Some(item));
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/filter_map.rs b/rustc_deps/vendor/futures-util-preview/src/stream/filter_map.rs
index 0cb1e39..36989f5 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/filter_map.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/filter_map.rs
@@ -86,17 +86,17 @@
         lw: &LocalWaker,
     ) -> Poll<Option<T>> {
         loop {
-            if self.pending().as_pin_mut().is_none() {
-                let item = match ready!(self.stream().poll_next(lw)) {
+            if self.as_mut().pending().as_pin_mut().is_none() {
+                let item = match ready!(self.as_mut().stream().poll_next(lw)) {
                     Some(e) => e,
                     None => return Poll::Ready(None),
                 };
-                let fut = (self.f())(item);
-                Pin::set(self.pending(), Some(fut));
+                let fut = (self.as_mut().f())(item);
+                self.as_mut().pending().set(Some(fut));
             }
 
-            let item = ready!(self.pending().as_pin_mut().unwrap().poll(lw));
-            Pin::set(self.pending(), None);
+            let item = ready!(self.as_mut().pending().as_pin_mut().unwrap().poll(lw));
+            self.as_mut().pending().set(None);
             if item.is_some() {
                 return Poll::Ready(item);
             }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/flatten.rs b/rustc_deps/vendor/futures-util-preview/src/stream/flatten.rs
index 0d55516..b4c8647 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/flatten.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/flatten.rs
@@ -74,17 +74,17 @@
         lw: &LocalWaker,
     ) -> Poll<Option<Self::Item>> {
         loop {
-            if self.next().as_pin_mut().is_none() {
-                match ready!(self.stream().poll_next(lw)) {
-                    Some(e) => Pin::set(self.next(), Some(e)),
+            if self.as_mut().next().as_pin_mut().is_none() {
+                match ready!(self.as_mut().stream().poll_next(lw)) {
+                    Some(e) => self.as_mut().next().set(Some(e)),
                     None => return Poll::Ready(None),
                 }
             }
-            let item = ready!(self.next().as_pin_mut().unwrap().poll_next(lw));
+            let item = ready!(self.as_mut().next().as_pin_mut().unwrap().poll_next(lw));
             if item.is_some() {
                 return Poll::Ready(item);
             } else {
-                Pin::set(self.next(), None);
+                self.as_mut().next().set(None);
             }
         }
     }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/fold.rs b/rustc_deps/vendor/futures-util-preview/src/stream/fold.rs
index bc56860..3911694 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/fold.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/fold.rs
@@ -55,19 +55,19 @@
     fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<T> {
         loop {
             // we're currently processing a future to produce a new accum value
-            if self.accum().is_none() {
-                let accum = ready!(self.future().as_pin_mut().unwrap().poll(lw));
-                *self.accum() = Some(accum);
-                Pin::set(self.future(), None);
+            if self.as_mut().accum().is_none() {
+                let accum = ready!(self.as_mut().future().as_pin_mut().unwrap().poll(lw));
+                *self.as_mut().accum() = Some(accum);
+                self.as_mut().future().set(None);
             }
 
-            let item = ready!(self.stream().poll_next(lw));
-            let accum = self.accum().take()
+            let item = ready!(self.as_mut().stream().poll_next(lw));
+            let accum = self.as_mut().accum().take()
                 .expect("Fold polled after completion");
 
             if let Some(e) = item {
-                let future = (self.f())(accum, e);
-                Pin::set(self.future(), Some(future));
+                let future = (self.as_mut().f())(accum, e);
+                self.as_mut().future().set(Some(future));
             } else {
                 return Poll::Ready(accum)
             }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/for_each.rs b/rustc_deps/vendor/futures-util-preview/src/stream/for_each.rs
index 0f8d1a4..f14957f 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/for_each.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/for_each.rs
@@ -56,15 +56,15 @@
 
     fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<()> {
         loop {
-            if let Some(future) = self.future().as_pin_mut() {
+            if let Some(future) = self.as_mut().future().as_pin_mut() {
                 ready!(future.poll(lw));
             }
-            Pin::set(self.future(), None);
+            self.as_mut().future().as_mut().set(None);
 
-            match ready!(self.stream().poll_next(lw)) {
+            match ready!(self.as_mut().stream().poll_next(lw)) {
                 Some(e) => {
-                    let future = (self.f())(e);
-                    Pin::set(self.future(), Some(future));
+                    let future = (self.as_mut().f())(e);
+                    self.as_mut().future().set(Some(future));
                 }
                 None => {
                     return Poll::Ready(());
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/for_each_concurrent.rs b/rustc_deps/vendor/futures-util-preview/src/stream/for_each_concurrent.rs
index 27d24d0..2e6f924 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/for_each_concurrent.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/for_each_concurrent.rs
@@ -66,11 +66,11 @@
             let mut made_progress_this_iter = false;
 
             // Try and pull an item from the stream
-            let current_len = self.futures().len();
+            let current_len = self.futures.len();
             // Check if we've already created a number of futures greater than `limit`
-            if self.limit().map(|limit| limit.get() > current_len).unwrap_or(true) {
+            if self.limit.map(|limit| limit.get() > current_len).unwrap_or(true) {
                 let mut stream_completed = false;
-                let elem = if let Some(stream) = self.stream().as_pin_mut() {
+                let elem = if let Some(stream) = self.as_mut().stream().as_pin_mut() {
                     match stream.poll_next(lw) {
                         Poll::Ready(Some(elem)) => {
                             made_progress_this_iter = true;
@@ -86,18 +86,18 @@
                     None
                 };
                 if stream_completed {
-                    Pin::set(self.stream(), None);
+                    self.as_mut().stream().set(None);
                 }
                 if let Some(elem) = elem {
-                    let next_future = (self.f())(elem);
-                    self.futures().push(next_future);
+                    let next_future = (self.as_mut().f())(elem);
+                    self.as_mut().futures().push(next_future);
                 }
             }
 
-            match self.futures().poll_next_unpin(lw) {
+            match self.as_mut().futures().poll_next_unpin(lw) {
                 Poll::Ready(Some(())) => made_progress_this_iter = true,
                 Poll::Ready(None) => {
-                    if self.stream().is_none() {
+                    if self.as_mut().stream().is_none() {
                         return Poll::Ready(())
                     }
                 },
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/forward.rs b/rustc_deps/vendor/futures-util-preview/src/stream/forward.rs
index 96c5385..0a4bcc5 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/forward.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/forward.rs
@@ -51,12 +51,12 @@
     ) -> Poll<Result<(), Si::SinkError>> {
         debug_assert!(self.buffered_item.is_none());
         {
-            let mut sink = self.sink().as_pin_mut().unwrap();
+            let mut sink = self.as_mut().sink().as_pin_mut().unwrap();
             if try_poll!(sink.as_mut().poll_ready(lw)).is_ready() {
                 return Poll::Ready(sink.start_send(item));
             }
         }
-        *self.buffered_item() = Some(item);
+        *self.as_mut().buffered_item() = Some(item);
         Poll::Pending
     }
 }
@@ -80,22 +80,22 @@
     ) -> Poll<Self::Output> {
         // If we've got an item buffered already, we need to write it to the
         // sink before we can do anything else
-        if let Some(item) = self.buffered_item().take() {
+        if let Some(item) = self.as_mut().buffered_item().take() {
             try_ready!(self.as_mut().try_start_send(lw, item));
         }
 
         loop {
-            match self.stream().poll_next(lw) {
+            match self.as_mut().stream().poll_next(lw) {
                 Poll::Ready(Some(Ok(item))) =>
                    try_ready!(self.as_mut().try_start_send(lw, item)),
                 Poll::Ready(Some(Err(e))) => return Poll::Ready(Err(e)),
                 Poll::Ready(None) => {
-                    try_ready!(self.sink().as_pin_mut().expect(INVALID_POLL)
+                    try_ready!(self.as_mut().sink().as_pin_mut().expect(INVALID_POLL)
                                    .poll_close(lw));
-                    return Poll::Ready(Ok(self.sink().take().unwrap()))
+                    return Poll::Ready(Ok(self.as_mut().sink().take().unwrap()))
                 }
                 Poll::Pending => {
-                    try_ready!(self.sink().as_pin_mut().expect(INVALID_POLL)
+                    try_ready!(self.as_mut().sink().as_pin_mut().expect(INVALID_POLL)
                                    .poll_flush(lw));
                     return Poll::Pending
                 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/fuse.rs b/rustc_deps/vendor/futures-util-preview/src/stream/fuse.rs
index 05c817f..1ab28c0 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/fuse.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/fuse.rs
@@ -83,13 +83,13 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<S::Item>> {
-        if *self.done() {
+        if *self.as_mut().done() {
             return Poll::Ready(None);
         }
 
-        let item = ready!(self.stream().poll_next(lw));
+        let item = ready!(self.as_mut().stream().poll_next(lw));
         if item.is_none() {
-            *self.done() = true;
+            *self.as_mut().done() = true;
         }
         Poll::Ready(item)
     }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/futures_ordered.rs b/rustc_deps/vendor/futures-util-preview/src/stream/futures_ordered.rs
index 761e2a6..7fe470d 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/futures_ordered.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/futures_ordered.rs
@@ -51,7 +51,7 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Self::Output> {
-        self.data().poll(lw)
+        self.as_mut().data().as_mut().poll(lw)
             .map(|output| OrderWrapper { data: output, index: self.index })
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/futures_unordered/mod.rs b/rustc_deps/vendor/futures-util-preview/src/stream/futures_unordered/mod.rs
index 85a90e7..524e922 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/futures_unordered/mod.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/futures_unordered/mod.rs
@@ -402,7 +402,7 @@
             // the internal allocation, appropriately accessing fields and
             // deallocating the task if need be.
             let res = {
-                let lw = bomb.task.as_ref().unwrap().local_waker();
+                let lw = Task::local_waker(bomb.task.as_ref().unwrap());
 
                 // Safety: We won't move the future ever again
                 let future = unsafe { Pin::new_unchecked(future) };
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/futures_unordered/task.rs b/rustc_deps/vendor/futures-util-preview/src/stream/futures_unordered/task.rs
index 55f3d59..8acf331 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/futures_unordered/task.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/futures_unordered/task.rs
@@ -33,8 +33,8 @@
 }
 
 impl<Fut> Task<Fut> {
-    pub(super) fn wake(self: &Arc<Task<Fut>>) {
-        let inner = match self.ready_to_run_queue.upgrade() {
+    pub(super) fn wake(this: &Arc<Task<Fut>>) {
+        let inner = match this.ready_to_run_queue.upgrade() {
             Some(inner) => inner,
             None => return,
         };
@@ -51,16 +51,16 @@
         // implementation guarantees that if we set the `queued` flag that
         // there's a reference count held by the main `FuturesUnordered` queue
         // still.
-        let prev = self.queued.swap(true, SeqCst);
+        let prev = this.queued.swap(true, SeqCst);
         if !prev {
-            inner.enqueue(&**self);
+            inner.enqueue(&**this);
             inner.waker.wake();
         }
     }
 
     /// Returns a waker.
-    pub(super) fn waker(self: &Arc<Task<Fut>>) -> Waker {
-        let clone = self.clone();
+    pub(super) fn waker(this: &Arc<Task<Fut>>) -> Waker {
+        let clone = this.clone();
 
         // Safety: This is save because an `Arc` is a struct which contains
         // a single field that is a pointer.
@@ -83,11 +83,11 @@
     }
 
     /// Returns a local waker for this task without cloning the Arc.
-    pub(super) fn local_waker<'a>(self: &'a Arc<Task<Fut>>) -> LocalWakerRef<'a> {
+    pub(super) fn local_waker<'a>(this: &'a Arc<Task<Fut>>) -> LocalWakerRef<'a> {
         // Safety: This is safe because an `Arc` is a struct which contains
         // a single field that is a pointer.
         let ptr = unsafe {
-            *(self as *const _ as *const NonNull<ArcTaskUnowned<Fut>>)
+            *(this as *const _ as *const NonNull<ArcTaskUnowned<Fut>>)
         };
 
         let ptr = ptr as NonNull<dyn UnsafeWake>;
@@ -154,7 +154,7 @@
         let me: *const ArcTask<Fut> = self;
         let task = &*(&me as *const *const ArcTask<Fut>
                           as *const Arc<Task<Fut>>);
-        task.waker()
+        Task::waker(task)
     }
 
     #[inline]
@@ -170,7 +170,7 @@
         let me: *const ArcTask<Fut> = self;
         let task = &*(&me as *const *const ArcTask<Fut>
                           as *const Arc<Task<Fut>>);
-        task.wake();
+        Task::wake(task);
     }
 }
 
@@ -180,8 +180,9 @@
         let me: *const ArcTaskUnowned<Fut> = self;
         let task = &*(&me as *const *const ArcTaskUnowned<Fut>
                           as *const Arc<Task<Fut>>);
-        task.waker() // Clones the `Arc` and the returned waker owns the
-                     // clone. (`ArcTask<Fut>` not `ArcTaskUnowned<Fut>`)
+        // Clones the `Arc` and the returned waker owns the
+        // clone. (`ArcTask<Fut>` not `ArcTaskUnowned<Fut>`)
+        Task::waker(task)
     }
 
     #[inline]
@@ -192,6 +193,6 @@
         let me: *const ArcTaskUnowned<Fut> = self;
         let task = &*(&me as *const *const ArcTaskUnowned<Fut>
                           as *const Arc<Task<Fut>>);
-       task.wake();
+       Task::wake(task);
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/inspect.rs b/rustc_deps/vendor/futures-util-preview/src/stream/inspect.rs
index 5cf5374..f993ba4 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/inspect.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/inspect.rs
@@ -67,9 +67,9 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker
     ) -> Poll<Option<St::Item>> {
-        let item = ready!(self.stream().poll_next(lw));
+        let item = ready!(self.as_mut().stream().poll_next(lw));
         Poll::Ready(item.map(|e| {
-            (self.f())(&e);
+            (self.as_mut().f())(&e);
             e
         }))
     }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/map.rs b/rustc_deps/vendor/futures-util-preview/src/stream/map.rs
index aee80dd..6b9042a 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/map.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/map.rs
@@ -68,8 +68,8 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker
     ) -> Poll<Option<T>> {
-        let option = ready!(self.stream().poll_next(lw));
-        Poll::Ready(option.map(self.f()))
+        let option = ready!(self.as_mut().stream().poll_next(lw));
+        Poll::Ready(option.map(self.as_mut().f()))
     }
 }
 
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/mod.rs b/rustc_deps/vendor/futures-util-preview/src/stream/mod.rs
index 159c30e..63dda64 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/mod.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/mod.rs
@@ -145,11 +145,10 @@
 #[cfg(feature = "std")]
 pub use self::split::{SplitStream, SplitSink, ReuniteError};
 
-// ToDo
-// #[cfg(feature = "std")]
-// mod select_all;
-// #[cfg(feature = "std")]
-// pub use self::select_all::{select_all, SelectAll};
+#[cfg(feature = "std")]
+mod select_all;
+#[cfg(feature = "std")]
+pub use self::select_all::{select_all, SelectAll};
 
 impl<T: ?Sized> StreamExt for T where T: Stream {}
 
@@ -168,7 +167,6 @@
     /// # Examples
     ///
     /// ```
-    /// #![feature(pin)]
     /// use futures::executor::block_on;
     /// use futures::stream::{self, StreamExt};
     ///
@@ -201,7 +199,6 @@
     /// # Examples
     ///
     /// ```
-    /// #![feature(pin)]
     /// use futures::executor::block_on;
     /// use futures::stream::{self, StreamExt};
     ///
@@ -807,7 +804,7 @@
     fn boxed(self) -> Pin<Box<Self>>
         where Self: Sized
     {
-        Box::pinned(self)
+        Box::pin(self)
     }
 
     /// An adaptor for creating a buffered list of pending futures.
@@ -1085,7 +1082,7 @@
     /// # Examples
     ///
     /// ```
-    /// #![feature(async_await, await_macro, futures_api, pin)]
+    /// #![feature(async_await, await_macro, futures_api)]
     /// # futures::executor::block_on(async {
     /// use futures::{future, select};
     /// use futures::stream::{StreamExt, FuturesUnordered};
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/once.rs b/rustc_deps/vendor/futures-util-preview/src/stream/once.rs
index a7a34ea..99cf07d 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/once.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/once.rs
@@ -42,12 +42,12 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<Fut::Output>> {
-        let val = if let Some(f) = self.future().as_pin_mut() {
+        let val = if let Some(f) = self.as_mut().future().as_pin_mut() {
             ready!(f.poll(lw))
         } else {
             return Poll::Ready(None)
         };
-        Pin::set(self.future(), None);
+        self.future().set(None);
         Poll::Ready(Some(val))
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/peek.rs b/rustc_deps/vendor/futures-util-preview/src/stream/peek.rs
index 470111f..3e1d5b3 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/peek.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/peek.rs
@@ -35,17 +35,19 @@
     /// This method polls the underlying stream and return either a reference
     /// to the next item if the stream is ready or passes through any errors.
     pub fn peek<'a>(
-        self: &'a mut Pin<&mut Self>,
+        mut self: Pin<&'a mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<&'a St::Item>> {
-        if self.peeked().is_some() {
-            return Poll::Ready(self.peeked().as_ref())
+        if self.peeked.is_some() {
+            let this: &Self = self.into_ref().get_ref();
+            return Poll::Ready(this.peeked.as_ref())
         }
-        match ready!(self.stream().poll_next(lw)) {
+        match ready!(self.as_mut().stream().poll_next(lw)) {
             None => Poll::Ready(None),
             Some(item) => {
-                *self.peeked() = Some(item);
-                Poll::Ready(self.peeked().as_ref())
+                *self.as_mut().peeked() = Some(item);
+                let this: &Self = self.into_ref().get_ref();
+                Poll::Ready(this.peeked.as_ref())
             }
         }
     }
@@ -64,10 +66,10 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker
     ) -> Poll<Option<Self::Item>> {
-        if let Some(item) = self.peeked().take() {
+        if let Some(item) = self.as_mut().peeked().take() {
             return Poll::Ready(Some(item))
         }
-        self.stream().poll_next(lw)
+        self.as_mut().stream().poll_next(lw)
     }
 }
 
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/select.rs b/rustc_deps/vendor/futures-util-preview/src/stream/select.rs
index 5e429e3..7ad22f0 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/select.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/select.rs
@@ -53,7 +53,7 @@
         lw: &LocalWaker
     ) -> Poll<Option<St1::Item>> {
         let Select { flag, stream1, stream2 } =
-            unsafe { Pin::get_mut_unchecked(self) };
+            unsafe { Pin::get_unchecked_mut(self) };
         let stream1 = unsafe { Pin::new_unchecked(stream1) };
         let stream2 = unsafe { Pin::new_unchecked(stream2) };
 
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/disabled/select_all.rs b/rustc_deps/vendor/futures-util-preview/src/stream/select_all.rs
similarity index 66%
rename from rustc_deps/vendor/futures-util-preview/src/stream/disabled/select_all.rs
rename to rustc_deps/vendor/futures-util-preview/src/stream/select_all.rs
index 214aafa..0c53485 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/disabled/select_all.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/select_all.rs
@@ -2,11 +2,12 @@
 
 use std::fmt::{self, Debug};
 use std::pin::Pin;
+use std::marker::Unpin;
 
-use futures_core::{Poll, Stream};
-use futures_core::task;
+use futures_core::{Poll, Stream, FusedStream};
+use futures_core::task::LocalWaker;
 
-use stream::{StreamExt, StreamFuture, FuturesUnordered};
+use crate::stream::{StreamExt, StreamFuture, FuturesUnordered};
 
 /// An unbounded set of streams
 ///
@@ -31,11 +32,12 @@
     }
 }
 
-impl<St: Stream> SelectAll<St> {
+impl<St: Stream + Unpin> SelectAll<St> {
     /// Constructs a new, empty `SelectAll`
     ///
     /// The returned `SelectAll` does not contain any streams and, in this
-    /// state, `SelectAll::poll` will return `Ok(Async::Ready(None))`.
+    /// state, `SelectAll::poll` will return `Poll::Ready(None)`.
+    #[allow(clippy::new_without_default_derive)]
     pub fn new() -> SelectAll<St> {
         SelectAll { inner: FuturesUnordered::new() }
     }
@@ -58,30 +60,42 @@
     /// function will not call `poll` on the submitted stream. The caller must
     /// ensure that `SelectAll::poll` is called in order to receive task
     /// notifications.
-    pub fn push(&mut self, stream: S) {
-        self.inner.push(stream.next());
+    pub fn push(&mut self, stream: St) {
+        self.inner.push(stream.into_future());
     }
 }
 
-impl<St: Stream> Stream for SelectAll<St> {
-    type Item = S::Item;
-    type Error = S::Error;
+impl<St: Stream + Unpin> Stream for SelectAll<St> {
+    type Item = St::Item;
 
     fn poll_next(
-        &mut self,
+        mut self: Pin<&mut Self>,
         lw: &LocalWaker,
-    ) -> Poll<Option<Self::Item>, Self::Error> {
-        match self.inner.poll_next(lw).map_err(|(err, _)| err)? {
-            Async::Pending => Ok(Async::Pending),
-            Async::Ready(Some((Some(item), remaining))) => {
+    ) -> Poll<Option<Self::Item>> {
+        match self.inner.poll_next_unpin(lw) {
+            Poll::Pending => Poll::Pending,
+            Poll::Ready(Some((Some(item), remaining))) => {
                 self.push(remaining);
-                Ok(Async::Ready(Some(item)))
+                Poll::Ready(Some(item))
             }
-            Async::Ready(_) => Ok(Async::Ready(None)),
+            Poll::Ready(Some((None, _))) => {
+                // FuturesUnordered thinks it isn't terminated
+                // because it yielded a Some. Here we poll it
+                // so it can realize it is terminated.
+                self.inner.poll_next_unpin(lw);
+                Poll::Ready(None)
+            }
+            Poll::Ready(_) => Poll::Ready(None),
         }
     }
 }
 
+impl<St: Stream + Unpin> FusedStream for SelectAll<St> {
+    fn is_terminated(&self) -> bool {
+        self.inner.is_terminated()
+    }
+}
+
 /// Convert a list of streams into a `Stream` of results from the streams.
 ///
 /// This essentially takes a list of streams (e.g. a vector, an iterator, etc.)
@@ -93,7 +107,7 @@
 /// futures into the set as they become available.
 pub fn select_all<I>(streams: I) -> SelectAll<I::Item>
     where I: IntoIterator,
-          I::Item: Stream
+          I::Item: Stream + Unpin
 {
     let mut set = SelectAll::new();
 
@@ -101,5 +115,5 @@
         set.push(stream);
     }
 
-    return set
+    set
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/skip.rs b/rustc_deps/vendor/futures-util-preview/src/stream/skip.rs
index b087566..1928387 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/skip.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/skip.rs
@@ -64,14 +64,14 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<St::Item>> {
-        while *self.remaining() > 0 {
-            match ready!(self.stream().poll_next(lw)) {
-                Some(_) => *self.remaining() -= 1,
+        while self.remaining > 0 {
+            match ready!(self.as_mut().stream().poll_next(lw)) {
+                Some(_) => *self.as_mut().remaining() -= 1,
                 None => return Poll::Ready(None),
             }
         }
 
-        self.stream().poll_next(lw)
+        self.as_mut().stream().poll_next(lw)
     }
 }
 
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/skip_while.rs b/rustc_deps/vendor/futures-util-preview/src/stream/skip_while.rs
index 883343e..8d4ef62 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/skip_while.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/skip_while.rs
@@ -83,27 +83,27 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<St::Item>> {
-        if *self.done_skipping() {
-            return self.stream().poll_next(lw);
+        if self.done_skipping {
+            return self.as_mut().stream().poll_next(lw);
         }
 
         loop {
-            if self.pending_item().is_none() {
-                let item = match ready!(self.stream().poll_next(lw)) {
+            if self.pending_item.is_none() {
+                let item = match ready!(self.as_mut().stream().poll_next(lw)) {
                     Some(e) => e,
                     None => return Poll::Ready(None),
                 };
-                let fut = (self.f())(&item);
-                Pin::set(self.pending_fut(), Some(fut));
-                *self.pending_item() = Some(item);
+                let fut = (self.as_mut().f())(&item);
+                self.as_mut().pending_fut().set(Some(fut));
+                *self.as_mut().pending_item() = Some(item);
             }
 
-            let skipped = ready!(self.pending_fut().as_pin_mut().unwrap().poll(lw));
-            let item = self.pending_item().take().unwrap();
-            Pin::set(self.pending_fut(), None);
+            let skipped = ready!(self.as_mut().pending_fut().as_pin_mut().unwrap().poll(lw));
+            let item = self.as_mut().pending_item().take().unwrap();
+            self.as_mut().pending_fut().set(None);
 
             if !skipped {
-                *self.done_skipping() = true;
+                *self.as_mut().done_skipping() = true;
                 return Poll::Ready(Some(item))
             }
         }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/take.rs b/rustc_deps/vendor/futures-util-preview/src/stream/take.rs
index 6ad7f19..e4f3563 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/take.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/take.rs
@@ -60,13 +60,13 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker
     ) -> Poll<Option<St::Item>> {
-        if *self.remaining() == 0 {
+        if self.remaining == 0 {
             Poll::Ready(None)
         } else {
-            let next = ready!(self.stream().poll_next(lw));
+            let next = ready!(self.as_mut().stream().poll_next(lw));
             match next {
-                Some(_) => *self.remaining() -= 1,
-                None => *self.remaining() = 0,
+                Some(_) => *self.as_mut().remaining() -= 1,
+                None => *self.as_mut().remaining() = 0,
             }
             Poll::Ready(next)
         }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/take_while.rs b/rustc_deps/vendor/futures-util-preview/src/stream/take_while.rs
index 12e2974..68953ff 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/take_while.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/take_while.rs
@@ -77,28 +77,28 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<St::Item>> {
-        if *self.done_taking() {
+        if self.done_taking {
             return Poll::Ready(None);
         }
 
-        if self.pending_item().is_none() {
-            let item = match ready!(self.stream().poll_next(lw)) {
+        if self.pending_item.is_none() {
+            let item = match ready!(self.as_mut().stream().poll_next(lw)) {
                 Some(e) => e,
                 None => return Poll::Ready(None),
             };
-            let fut = (self.f())(&item);
-            Pin::set(self.pending_fut(), Some(fut));
-            *self.pending_item() = Some(item);
+            let fut = (self.as_mut().f())(&item);
+            self.as_mut().pending_fut().set(Some(fut));
+            *self.as_mut().pending_item() = Some(item);
         }
 
-        let take = ready!(self.pending_fut().as_pin_mut().unwrap().poll(lw));
-        Pin::set(self.pending_fut(), None);
-        let item = self.pending_item().take().unwrap();
+        let take = ready!(self.as_mut().pending_fut().as_pin_mut().unwrap().poll(lw));
+        self.as_mut().pending_fut().set(None);
+        let item = self.as_mut().pending_item().take().unwrap();
 
         if take {
             Poll::Ready(Some(item))
         } else {
-            *self.done_taking() = true;
+            *self.as_mut().done_taking() = true;
             Poll::Ready(None)
         }
     }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/then.rs b/rustc_deps/vendor/futures-util-preview/src/stream/then.rs
index b38f7a4..f0367a3 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/then.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/then.rs
@@ -53,17 +53,17 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker
     ) -> Poll<Option<Fut::Output>> {
-        if self.future().as_pin_mut().is_none() {
-            let item = match ready!(self.stream().poll_next(lw)) {
+        if self.as_mut().future().as_pin_mut().is_none() {
+            let item = match ready!(self.as_mut().stream().poll_next(lw)) {
                 None => return Poll::Ready(None),
                 Some(e) => e,
             };
-            let fut = (self.f())(item);
-            Pin::set(self.future(), Some(fut));
+            let fut = (self.as_mut().f())(item);
+            self.as_mut().future().set(Some(fut));
         }
 
-        let e = ready!(self.future().as_pin_mut().unwrap().poll(lw));
-        Pin::set(self.future(), None);
+        let e = ready!(self.as_mut().future().as_pin_mut().unwrap().poll(lw));
+        self.as_mut().future().set(None);
         Poll::Ready(Some(e))
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/unfold.rs b/rustc_deps/vendor/futures-util-preview/src/stream/unfold.rs
index 436fcce..f84a88b 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/unfold.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/unfold.rs
@@ -94,16 +94,16 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker
     ) -> Poll<Option<It>> {
-        if let Some(state) = self.state().take() {
-            let fut = (self.f())(state);
-            Pin::set(self.fut(), Some(fut));
+        if let Some(state) = self.as_mut().state().take() {
+            let fut = (self.as_mut().f())(state);
+            Pin::set(self.as_mut().fut(), Some(fut));
         }
 
-        let step = ready!(self.fut().as_pin_mut().unwrap().poll(lw));
-        Pin::set(self.fut(), None);
+        let step = ready!(self.as_mut().fut().as_pin_mut().unwrap().poll(lw));
+        self.as_mut().fut().set(None);
 
         if let Some((item, next_state)) = step {
-            *self.state() = Some(next_state);
+            *self.as_mut().state() = Some(next_state);
             return Poll::Ready(Some(item))
         } else {
             return Poll::Ready(None)
diff --git a/rustc_deps/vendor/futures-util-preview/src/stream/zip.rs b/rustc_deps/vendor/futures-util-preview/src/stream/zip.rs
index c0cfc41..3036212 100644
--- a/rustc_deps/vendor/futures-util-preview/src/stream/zip.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/stream/zip.rs
@@ -53,24 +53,24 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker
     ) -> Poll<Option<Self::Item>> {
-        if self.queued1().is_none() {
-            match self.stream1().poll_next(lw) {
-                Poll::Ready(Some(item1)) => *self.queued1() = Some(item1),
+        if self.queued1.is_none() {
+            match self.as_mut().stream1().poll_next(lw) {
+                Poll::Ready(Some(item1)) => *self.as_mut().queued1() = Some(item1),
                 Poll::Ready(None) | Poll::Pending => {}
             }
         }
-        if self.queued2().is_none() {
-            match self.stream2().poll_next(lw) {
-                Poll::Ready(Some(item2)) => *self.queued2() = Some(item2),
+        if self.as_mut().queued2().is_none() {
+            match self.as_mut().stream2().poll_next(lw) {
+                Poll::Ready(Some(item2)) => *self.as_mut().queued2() = Some(item2),
                 Poll::Ready(None) | Poll::Pending => {}
             }
         }
 
-        if self.queued1().is_some() && self.queued2().is_some() {
-            let pair = (self.queued1().take().unwrap(),
-                        self.queued2().take().unwrap());
+        if self.queued1.is_some() && self.queued2.is_some() {
+            let pair = (self.as_mut().queued1().take().unwrap(),
+                        self.as_mut().queued2().take().unwrap());
             Poll::Ready(Some(pair))
-        } else if self.stream1().is_done() || self.stream2().is_done() {
+        } else if self.stream1.is_done() || self.stream2.is_done() {
             Poll::Ready(None)
         } else {
             Poll::Pending
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_future/and_then.rs b/rustc_deps/vendor/futures-util-preview/src/try_future/and_then.rs
index 200ef30..b6a2ab4 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_future/and_then.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_future/and_then.rs
@@ -42,7 +42,7 @@
 {
     type Output = Result<Fut2::Ok, Fut2::Error>;
 
-    fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Self::Output> {
+    fn poll(self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Self::Output> {
         self.try_chain().poll(lw, |result, async_op| {
             match result {
                 Ok(ok) => TryChainAction::Future(async_op(ok)),
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_future/err_into.rs b/rustc_deps/vendor/futures-util-preview/src/try_future/err_into.rs
index 5172eff..65e79c9 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_future/err_into.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_future/err_into.rs
@@ -36,7 +36,7 @@
     type Output = Result<Fut::Ok, E>;
 
     fn poll(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Self::Output> {
         self.future().try_poll(lw)
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_future/flatten_sink.rs b/rustc_deps/vendor/futures-util-preview/src/try_future/flatten_sink.rs
index 0295e18..1d1f07a 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_future/flatten_sink.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_future/flatten_sink.rs
@@ -33,7 +33,7 @@
         self: Pin<&'a mut Self>
     ) -> State<Pin<&'a mut Fut>, Pin<&'a mut Si>> {
         unsafe {
-            match &mut Pin::get_mut_unchecked(self).0 {
+            match &mut Pin::get_unchecked_mut(self).0 {
                 Waiting(f) => Waiting(Pin::new_unchecked(f)),
                 Ready(s) => Ready(Pin::new_unchecked(s)),
                 Closed => Closed,
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_future/into_future.rs b/rustc_deps/vendor/futures-util-preview/src/try_future/into_future.rs
index aaa4cad..ee13012 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_future/into_future.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_future/into_future.rs
@@ -28,7 +28,7 @@
 
     #[inline]
     fn poll(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Self::Output> {
         self.future().try_poll(lw)
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_future/map_err.rs b/rustc_deps/vendor/futures-util-preview/src/try_future/map_err.rs
index 058b49c..2ca9a9c 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_future/map_err.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_future/map_err.rs
@@ -38,10 +38,10 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Self::Output> {
-        match self.future().try_poll(lw) {
+        match self.as_mut().future().try_poll(lw) {
             Poll::Pending => Poll::Pending,
             Poll::Ready(result) => {
-                let f = self.f().take()
+                let f = self.as_mut().f().take()
                     .expect("MapErr must not be polled after it returned `Poll::Ready`");
                 Poll::Ready(result.map_err(f))
             }
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_future/map_ok.rs b/rustc_deps/vendor/futures-util-preview/src/try_future/map_ok.rs
index 6edaa7a..06d13ce 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_future/map_ok.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_future/map_ok.rs
@@ -40,10 +40,10 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Self::Output> {
-        match self.future().try_poll(lw) {
+        match self.as_mut().future().try_poll(lw) {
             Poll::Pending => Poll::Pending,
             Poll::Ready(result) => {
-                let op = self.f().take()
+                let op = self.as_mut().f().take()
                     .expect("MapOk must not be polled after it returned `Poll::Ready`");
                 Poll::Ready(result.map(op))
             }
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_future/or_else.rs b/rustc_deps/vendor/futures-util-preview/src/try_future/or_else.rs
index 14f8789..713637c 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_future/or_else.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_future/or_else.rs
@@ -43,7 +43,7 @@
     type Output = Result<Fut2::Ok, Fut2::Error>;
 
     fn poll(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Self::Output> {
         self.try_chain().poll(lw, |result, async_op| {
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_future/try_chain.rs b/rustc_deps/vendor/futures-util-preview/src/try_future/try_chain.rs
index 6053f3f..f545df9 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_future/try_chain.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_future/try_chain.rs
@@ -41,8 +41,8 @@
     {
         let mut f = Some(f);
 
-        // Safe to call `get_mut_unchecked` because we won't move the futures.
-        let this = unsafe { Pin::get_mut_unchecked(self) };
+        // Safe to call `get_unchecked_mut` because we won't move the futures.
+        let this = unsafe { Pin::get_unchecked_mut(self) };
 
         loop {
             let (output, data) = match this {
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_future/try_join.rs b/rustc_deps/vendor/futures-util-preview/src/try_future/try_join.rs
index 4c5bd43..74576f9 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_future/try_join.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_future/try_join.rs
@@ -73,26 +73,26 @@
                 mut self: Pin<&mut Self>, lw: &LocalWaker
             ) -> Poll<Self::Output> {
                 let mut all_done = true;
-                if self.Fut1().poll(lw).is_pending() {
+                if self.as_mut().Fut1().poll(lw).is_pending() {
                     all_done = false;
-                } else if self.Fut1().output_mut().unwrap().is_err() {
+                } else if self.as_mut().Fut1().output_mut().unwrap().is_err() {
                     return Poll::Ready(Err(
-                        self.Fut1().take_output().unwrap().err().unwrap()));
+                        self.as_mut().Fut1().take_output().unwrap().err().unwrap()));
                 }
                 $(
-                    if self.$Fut().poll(lw).is_pending() {
+                    if self.as_mut().$Fut().poll(lw).is_pending() {
                         all_done = false;
-                    } else if self.$Fut().output_mut().unwrap().is_err() {
+                    } else if self.as_mut().$Fut().output_mut().unwrap().is_err() {
                         return Poll::Ready(Err(
-                            self.$Fut().take_output().unwrap().err().unwrap()));
+                            self.as_mut().$Fut().take_output().unwrap().err().unwrap()));
                     }
                 )*
 
                 if all_done {
                     Poll::Ready(Ok((
-                        self.Fut1().take_output().unwrap().ok().unwrap(),
+                        self.as_mut().Fut1().take_output().unwrap().ok().unwrap(),
                         $(
-                            self.$Fut().take_output().unwrap().ok().unwrap()
+                            self.as_mut().$Fut().take_output().unwrap().ok().unwrap()
                         ),*
                     )))
                 } else {
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_future/unwrap_or_else.rs b/rustc_deps/vendor/futures-util-preview/src/try_future/unwrap_or_else.rs
index e198f00..ba290d1 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_future/unwrap_or_else.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_future/unwrap_or_else.rs
@@ -41,10 +41,10 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Self::Output> {
-        match self.future().try_poll(lw) {
+        match self.as_mut().future().try_poll(lw) {
             Poll::Pending => Poll::Pending,
             Poll::Ready(result) => {
-                let op = self.f().take()
+                let op = self.as_mut().f().take()
                     .expect("UnwrapOrElse already returned `Poll::Ready` before");
                 Poll::Ready(result.unwrap_or_else(op))
             }
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/err_into.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/err_into.rs
index dcd967c..2d15a60 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/err_into.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/err_into.rs
@@ -36,7 +36,7 @@
     type Item = Result<St::Ok, E>;
 
     fn poll_next(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<Self::Item>> {
         self.stream().try_poll_next(lw)
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/into_async_read.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/into_async_read.rs
new file mode 100644
index 0000000..ad5caf5
--- /dev/null
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/into_async_read.rs
@@ -0,0 +1,152 @@
+use core::marker::Unpin;
+use core::pin::Pin;
+use futures_core::stream::TryStream;
+use futures_core::task::{LocalWaker, Poll};
+use futures_io::AsyncRead;
+use std::cmp;
+use std::io::{Error, Result};
+
+/// An `AsyncRead` for the [`into_async_read`](super::TryStreamExt::into_async_read) combinator.
+#[derive(Debug)]
+#[must_use = "streams do nothing unless polled"]
+pub struct IntoAsyncRead<St>
+where
+    St: TryStream<Error = Error> + Unpin,
+    St::Ok: AsRef<[u8]>,
+{
+    stream: St,
+    state: ReadState<St::Ok>,
+}
+
+impl<St> Unpin for IntoAsyncRead<St>
+where
+    St: TryStream<Error = Error> + Unpin,
+    St::Ok: AsRef<[u8]>,
+{
+}
+
+#[derive(Debug)]
+enum ReadState<T: AsRef<[u8]>> {
+    Ready { chunk: T, chunk_start: usize },
+    PendingChunk,
+    Eof,
+}
+
+impl<St> IntoAsyncRead<St>
+where
+    St: TryStream<Error = Error> + Unpin,
+    St::Ok: AsRef<[u8]>,
+{
+    pub(super) fn new(stream: St) -> Self {
+        IntoAsyncRead {
+            stream,
+            state: ReadState::PendingChunk,
+        }
+    }
+}
+
+impl<St> AsyncRead for IntoAsyncRead<St>
+where
+    St: TryStream<Error = Error> + Unpin,
+    St::Ok: AsRef<[u8]>,
+{
+    fn poll_read(
+        &mut self,
+        lw: &LocalWaker,
+        buf: &mut [u8],
+    ) -> Poll<Result<usize>> {
+        loop {
+            match &mut self.state {
+                ReadState::Ready { chunk, chunk_start } => {
+                    let chunk = chunk.as_ref();
+                    let len = cmp::min(buf.len(), chunk.len() - *chunk_start);
+
+                    buf[..len].copy_from_slice(
+                        &chunk[*chunk_start..*chunk_start + len],
+                    );
+                    *chunk_start += len;
+
+                    if chunk.len() == *chunk_start {
+                        self.state = ReadState::PendingChunk;
+                    }
+
+                    return Poll::Ready(Ok(len));
+                }
+                ReadState::PendingChunk => {
+                    match ready!(Pin::new(&mut self.stream).try_poll_next(lw)) {
+                        Some(Ok(chunk)) => {
+                            self.state = ReadState::Ready {
+                                chunk,
+                                chunk_start: 0,
+                            };
+                            continue;
+                        }
+                        Some(Err(err)) => {
+                            self.state = ReadState::Eof;
+                            return Poll::Ready(Err(err));
+                        }
+                        None => {
+                            self.state = ReadState::Eof;
+                            return Poll::Ready(Ok(0));
+                        }
+                    }
+                }
+                ReadState::Eof => {
+                    return Poll::Ready(Ok(0));
+                }
+            }
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use futures::stream::{self, StreamExt, TryStreamExt};
+    use futures_io::AsyncRead;
+    use futures_test::task::noop_local_waker_ref;
+
+    macro_rules! assert_read {
+        ($reader:expr, $buf:expr, $item:expr) => {
+            let lw = noop_local_waker_ref();
+            match $reader.poll_read(lw, $buf) {
+                Poll::Ready(Ok(x)) => {
+                    assert_eq!(x, $item);
+                }
+                Poll::Ready(Err(err)) => {
+                    panic!("assertion failed: expected value but got {}", err);
+                }
+                Poll::Pending => {
+                    panic!("assertion failed: reader was not ready");
+                }
+            }
+        };
+    }
+
+    #[test]
+    fn test_into_async_read() {
+        let stream = stream::iter(1..=3).map(|_| Ok(vec![1, 2, 3, 4, 5]));
+        let mut reader = stream.into_async_read();
+        let mut buf = vec![0; 3];
+
+        assert_read!(reader, &mut buf, 3);
+        assert_eq!(&buf, &[1, 2, 3]);
+
+        assert_read!(reader, &mut buf, 2);
+        assert_eq!(&buf[..2], &[4, 5]);
+
+        assert_read!(reader, &mut buf, 3);
+        assert_eq!(&buf, &[1, 2, 3]);
+
+        assert_read!(reader, &mut buf, 2);
+        assert_eq!(&buf[..2], &[4, 5]);
+
+        assert_read!(reader, &mut buf, 3);
+        assert_eq!(&buf, &[1, 2, 3]);
+
+        assert_read!(reader, &mut buf, 2);
+        assert_eq!(&buf[..2], &[4, 5]);
+
+        assert_read!(reader, &mut buf, 0);
+    }
+}
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/into_stream.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/into_stream.rs
index 411caff..cfd4cda 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/into_stream.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/into_stream.rs
@@ -47,7 +47,7 @@
 
     #[inline]
     fn poll_next(
-        mut self: Pin<&mut Self>,
+        self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<Self::Item>> {
         self.stream().try_poll_next(lw)
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/map_err.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/map_err.rs
index 6a0ef45..a73e16f 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/map_err.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/map_err.rs
@@ -42,10 +42,10 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<Self::Item>> {
-        match self.stream().try_poll_next(lw) {
+        match self.as_mut().stream().try_poll_next(lw) {
             Poll::Pending => Poll::Pending,
             Poll::Ready(opt) =>
-                Poll::Ready(opt.map(|res| res.map_err(|e| self.f()(e)))),
+                Poll::Ready(opt.map(|res| res.map_err(|e| self.as_mut().f()(e)))),
         }
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/map_ok.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/map_ok.rs
index b8aa77d..b51c209 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/map_ok.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/map_ok.rs
@@ -42,10 +42,10 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<Self::Item>> {
-        match self.stream().try_poll_next(lw) {
+        match self.as_mut().stream().try_poll_next(lw) {
             Poll::Pending => Poll::Pending,
             Poll::Ready(opt) =>
-                Poll::Ready(opt.map(|res| res.map(|x| self.f()(x)))),
+                Poll::Ready(opt.map(|res| res.map(|x| self.as_mut().f()(x)))),
         }
     }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/mod.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/mod.rs
index bd9d26d..00e46b2 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/mod.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/mod.rs
@@ -4,8 +4,10 @@
 //! that return `Result`s, allowing for short-circuiting computations.
 
 use core::marker::Unpin;
+use core::pin::Pin;
 use futures_core::future::TryFuture;
 use futures_core::stream::TryStream;
+use futures_core::task::{LocalWaker, Poll};
 
 #[cfg(feature = "compat")]
 use crate::compat::Compat;
@@ -57,6 +59,11 @@
 #[cfg(feature = "std")]
 use futures_core::future::Future;
 
+#[cfg(feature = "std")]
+mod into_async_read;
+#[cfg(feature = "std")]
+pub use self::into_async_read::IntoAsyncRead;
+
 impl<S: TryStream> TryStreamExt for S {}
 
 /// Adapters specific to `Result`-returning streams
@@ -550,6 +557,17 @@
         TryBufferUnordered::new(self, n)
     }
 
+    /// A convenience method for calling [`TryStream::poll_next_unpin`] on [`Unpin`]
+    /// stream types.
+    fn try_poll_next_unpin(
+        &mut self,
+        lw: &LocalWaker
+    ) -> Poll<Option<Result<Self::Ok, Self::Error>>>
+    where Self: Unpin,
+    {
+        Pin::new(self).try_poll_next(lw)
+    }
+
     /// Wraps a [`TryStream`] into a stream compatible with libraries using
     /// futures 0.1 `Stream`. Requires the `compat` feature to be enabled.
     /// ```
@@ -572,8 +590,44 @@
     /// ```
     #[cfg(feature = "compat")]
     fn compat(self) -> Compat<Self>
-        where Self: Sized + Unpin,
+    where
+        Self: Sized + Unpin,
     {
         Compat::new(self)
     }
+
+    /// Adapter that converts this stream into an [`AsyncRead`].
+    ///
+    /// Note that because `into_async_read` moves the stream, the [`Stream`] type must be
+    /// [`Unpin`]. If you want to use `into_async_read` with a [`!Unpin`](Unpin) stream, you'll
+    /// first have to pin the stream. This can be done by boxing the stream using [`Box::pinned`]
+    /// or pinning it to the stack using the `pin_mut!` macro from the `pin_utils` crate.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// #![feature(async_await, await_macro)]
+    /// # futures::executor::block_on(async {
+    /// use futures::executor::block_on;
+    /// use futures::future::lazy;
+    /// use futures::stream::{self, StreamExt, TryStreamExt};
+    /// use futures::io::{AsyncRead, AsyncReadExt};
+    /// use std::io::Error;
+    ///
+    /// let stream = stream::iter(vec![Ok(vec![1, 2, 3, 4, 5])]);
+    /// let mut reader = stream.into_async_read();
+    /// let mut buf = Vec::new();
+    ///
+    /// assert!(await!(reader.read_to_end(&mut buf)).is_ok());
+    /// assert_eq!(buf, &[1, 2, 3, 4, 5]);
+    /// # })
+    /// ```
+    #[cfg(feature = "std")]
+    fn into_async_read(self) -> IntoAsyncRead<Self>
+    where
+        Self: Sized + TryStreamExt<Error = std::io::Error> + Unpin,
+        Self::Ok: AsRef<[u8]>,
+    {
+        IntoAsyncRead::new(self)
+    }
 }
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_buffer_unordered.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_buffer_unordered.rs
index 638962a..cf08d57 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_buffer_unordered.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_buffer_unordered.rs
@@ -76,15 +76,15 @@
         // First up, try to spawn off as many futures as possible by filling up
         // our slab of futures. Propagate errors from the stream immediately.
         while self.in_progress_queue.len() < self.max {
-            match self.stream().poll_next(lw) {
-                Poll::Ready(Some(Ok(fut))) => self.in_progress_queue().push(fut.into_future()),
+            match self.as_mut().stream().poll_next(lw) {
+                Poll::Ready(Some(Ok(fut))) => self.as_mut().in_progress_queue().push(fut.into_future()),
                 Poll::Ready(Some(Err(e))) => return Poll::Ready(Some(Err(e))),
                 Poll::Ready(None) | Poll::Pending => break,
             }
         }
 
         // Attempt to pull the next value from the in_progress_queue
-        match Pin::new(self.in_progress_queue()).poll_next(lw) {
+        match Pin::new(self.as_mut().in_progress_queue()).poll_next(lw) {
             x @ Poll::Pending | x @ Poll::Ready(Some(_)) => return x,
             Poll::Ready(None) => {}
         }
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_collect.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_collect.rs
index 0f2ad43..115dd9e 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_collect.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_collect.rs
@@ -28,7 +28,7 @@
         }
     }
 
-    fn finish(mut self: Pin<&mut Self>) -> C {
+    fn finish(self: Pin<&mut Self>) -> C {
         mem::replace(self.items(), Default::default())
     }
 }
@@ -51,10 +51,10 @@
         lw: &LocalWaker,
     ) -> Poll<Self::Output> {
         loop {
-            match ready!(self.stream().try_poll_next(lw)) {
-                Some(Ok(x)) => self.items().extend(Some(x)),
+            match ready!(self.as_mut().stream().try_poll_next(lw)) {
+                Some(Ok(x)) => self.as_mut().items().extend(Some(x)),
                 Some(Err(e)) => return Poll::Ready(Err(e)),
-                None => return Poll::Ready(Ok(self.finish())),
+                None => return Poll::Ready(Ok(self.as_mut().finish())),
             }
         }
     }
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_concat.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_concat.rs
index d000cb8..7c22f2c 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_concat.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_concat.rs
@@ -44,9 +44,9 @@
 
     fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Self::Output> {
         loop {
-            match ready!(self.stream().try_poll_next(lw)) {
+            match ready!(self.as_mut().stream().try_poll_next(lw)) {
                 Some(Ok(x)) => {
-                    let accum = self.accum();
+                    let accum = self.as_mut().accum();
                     if let Some(a) = accum {
                         a.extend(x)
                     } else {
@@ -55,7 +55,7 @@
                 },
                 Some(Err(e)) => return Poll::Ready(Err(e)),
                 None => {
-                    return Poll::Ready(Ok(self.accum().take().unwrap_or_default()))
+                    return Poll::Ready(Ok(self.as_mut().accum().take().unwrap_or_default()))
                 }
             }
         }
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_filter_map.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_filter_map.rs
index f515373..6a1f58d 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_filter_map.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_filter_map.rs
@@ -67,18 +67,18 @@
         lw: &LocalWaker,
     ) -> Poll<Option<Result<T, St::Error>>> {
         loop {
-            if self.pending().as_pin_mut().is_none() {
-                let item = match ready!(self.stream().try_poll_next(lw)) {
+            if self.pending.is_none() {
+                let item = match ready!(self.as_mut().stream().try_poll_next(lw)) {
                     Some(Ok(x)) => x,
                     Some(Err(e)) => return Poll::Ready(Some(Err(e))),
                     None => return Poll::Ready(None),
                 };
-                let fut = (self.f())(item);
-                Pin::set(self.pending(), Some(fut));
+                let fut = (self.as_mut().f())(item);
+                self.as_mut().pending().set(Some(fut));
             }
 
-            let result = ready!(self.pending().as_pin_mut().unwrap().try_poll(lw));
-            Pin::set(self.pending(), None);
+            let result = ready!(self.as_mut().pending().as_pin_mut().unwrap().try_poll(lw));
+            self.as_mut().pending().set(None);
             match result {
                 Ok(Some(x)) => return Poll::Ready(Some(Ok(x))),
                 Err(e) => return Poll::Ready(Some(Err(e))),
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_fold.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_fold.rs
index f3b148c..dadf833 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_fold.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_fold.rs
@@ -53,37 +53,37 @@
     fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Self::Output> {
         loop {
             // we're currently processing a future to produce a new accum value
-            if self.accum().is_none() {
+            if self.as_mut().accum().is_none() {
                 let accum = match ready!(
-                    self.future().as_pin_mut()
+                    self.as_mut().future().as_pin_mut()
                        .expect("TryFold polled after completion")
                        .try_poll(lw)
                 ) {
                     Ok(accum) => accum,
                     Err(e) => {
                         // Indicate that the future can no longer be polled.
-                        self.future().set(None);
+                        self.as_mut().future().set(None);
                         return Poll::Ready(Err(e));
                     }
                 };
-                *self.accum() = Some(accum);
-                Pin::set(self.future(), None);
+                *self.as_mut().accum() = Some(accum);
+                self.as_mut().future().set(None);
             }
 
-            let item = match ready!(self.stream().try_poll_next(lw)) {
+            let item = match ready!(self.as_mut().stream().try_poll_next(lw)) {
                 Some(Ok(item)) => Some(item),
                 Some(Err(e)) => {
                     // Indicate that the future can no longer be polled.
-                    *self.accum() = None;
+                    *self.as_mut().accum() = None;
                     return Poll::Ready(Err(e));
                 }
                 None => None,
             };
-            let accum = self.accum().take().unwrap();
+            let accum = self.as_mut().accum().take().unwrap();
 
             if let Some(e) = item {
-                let future = (self.f())(accum, e);
-                Pin::set(self.future(), Some(future));
+                let future = (self.as_mut().f())(accum, e);
+                self.as_mut().future().set(Some(future));
             } else {
                 return Poll::Ready(Ok(accum))
             }
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_for_each.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_for_each.rs
index fcc4676..8e26176 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_for_each.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_for_each.rs
@@ -46,15 +46,15 @@
 
     fn poll(mut self: Pin<&mut Self>, lw: &LocalWaker) -> Poll<Self::Output> {
         loop {
-            if let Some(future) = self.future().as_pin_mut() {
+            if let Some(future) = self.as_mut().future().as_pin_mut() {
                 try_ready!(future.try_poll(lw));
             }
-            Pin::set(self.future(), None);
+            Pin::set(self.as_mut().future(), None);
 
-            match ready!(self.stream().try_poll_next(lw)) {
+            match ready!(self.as_mut().stream().try_poll_next(lw)) {
                 Some(Ok(e)) => {
-                    let future = (self.f())(e);
-                    Pin::set(self.future(), Some(future));
+                    let future = (self.as_mut().f())(e);
+                    Pin::set(self.as_mut().future(), Some(future));
                 }
                 Some(Err(e)) => return Poll::Ready(Err(e)),
                 None => return Poll::Ready(Ok(())),
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_for_each_concurrent.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_for_each_concurrent.rs
index cbee817..1ac1965 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_for_each_concurrent.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_for_each_concurrent.rs
@@ -67,10 +67,10 @@
             let mut made_progress_this_iter = false;
 
             // Try and pull an item from the stream
-            let current_len = self.futures().len();
+            let current_len = self.as_mut().futures().len();
             // Check if we've already created a number of futures greater than `limit`
-            if self.limit().map(|limit| limit.get() > current_len).unwrap_or(true) {
-                let poll_res = match self.stream().as_pin_mut() {
+            if self.limit.map(|limit| limit.get() > current_len).unwrap_or(true) {
+                let poll_res = match self.as_mut().stream().as_pin_mut() {
                     Some(stream) => stream.try_poll_next(lw),
                     None => Poll::Ready(None),
                 };
@@ -81,29 +81,29 @@
                         Some(elem)
                     },
                     Poll::Ready(None) => {
-                        self.stream().set(None);
+                        self.as_mut().stream().set(None);
                         None
                     }
                     Poll::Pending => None,
                     Poll::Ready(Some(Err(e))) => {
                         // Empty the stream and futures so that we know
                         // the future has completed.
-                        self.stream().set(None);
-                        drop(mem::replace(self.futures(), FuturesUnordered::new()));
+                        self.as_mut().stream().set(None);
+                        drop(mem::replace(self.as_mut().futures(), FuturesUnordered::new()));
                         return Poll::Ready(Err(e));
                     }
                 };
 
                 if let Some(elem) = elem {
-                    let next_future = (self.f())(elem);
-                    self.futures().push(next_future);
+                    let next_future = (self.as_mut().f())(elem);
+                    self.as_mut().futures().push(next_future);
                 }
             }
 
-            match self.futures().poll_next_unpin(lw) {
+            match self.as_mut().futures().poll_next_unpin(lw) {
                 Poll::Ready(Some(Ok(()))) => made_progress_this_iter = true,
                 Poll::Ready(None) => {
-                    if self.stream().is_none() {
+                    if self.as_mut().stream().is_none() {
                         return Poll::Ready(Ok(()))
                     }
                 },
@@ -111,8 +111,8 @@
                 Poll::Ready(Some(Err(e))) => {
                     // Empty the stream and futures so that we know
                     // the future has completed.
-                    self.stream().set(None);
-                    drop(mem::replace(self.futures(), FuturesUnordered::new()));
+                    self.as_mut().stream().set(None);
+                    drop(mem::replace(self.as_mut().futures(), FuturesUnordered::new()));
                     return Poll::Ready(Err(e));
                 }
             }
diff --git a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_skip_while.rs b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_skip_while.rs
index 15d30e0..ce824fb 100644
--- a/rustc_deps/vendor/futures-util-preview/src/try_stream/try_skip_while.rs
+++ b/rustc_deps/vendor/futures-util-preview/src/try_stream/try_skip_while.rs
@@ -79,27 +79,27 @@
         mut self: Pin<&mut Self>,
         lw: &LocalWaker,
     ) -> Poll<Option<Self::Item>> {
-        if *self.done_skipping() {
-            return self.stream().try_poll_next(lw);
+        if self.done_skipping {
+            return self.as_mut().stream().try_poll_next(lw);
         }
 
         loop {
-            if self.pending_item().is_none() {
-                let item = match ready!(self.stream().try_poll_next(lw)?) {
+            if self.pending_item.is_none() {
+                let item = match ready!(self.as_mut().stream().try_poll_next(lw)?) {
                     Some(e) => e,
                     None => return Poll::Ready(None),
                 };
-                let fut = (self.f())(&item);
-                Pin::set(self.pending_fut(), Some(fut));
-                *self.pending_item() = Some(item);
+                let fut = (self.as_mut().f())(&item);
+                self.as_mut().pending_fut().set(Some(fut));
+                *self.as_mut().pending_item() = Some(item);
             }
 
-            let skipped = ready!(self.pending_fut().as_pin_mut().unwrap().try_poll(lw)?);
-            let item = self.pending_item().take().unwrap();
-            Pin::set(self.pending_fut(), None);
+            let skipped = ready!(self.as_mut().pending_fut().as_pin_mut().unwrap().try_poll(lw)?);
+            let item = self.as_mut().pending_item().take().unwrap();
+            self.as_mut().pending_fut().set(None);
 
             if !skipped {
-                *self.done_skipping() = true;
+                *self.as_mut().done_skipping() = true;
                 return Poll::Ready(Some(Ok(item)))
             }
         }
diff --git a/rustc_deps/vendor/futures-util-preview/tests/futures_unordered.rs b/rustc_deps/vendor/futures-util-preview/tests/futures_unordered.rs
index 6b3b876..1ea1fab 100644
--- a/rustc_deps/vendor/futures-util-preview/tests/futures_unordered.rs
+++ b/rustc_deps/vendor/futures-util-preview/tests/futures_unordered.rs
@@ -1,4 +1,4 @@
-#![feature(async_await, await_macro, futures_api, pin)]
+#![feature(async_await, await_macro, futures_api)]
 
 use futures::future;
 use futures::task::Poll;
diff --git a/rustc_deps/vendor/futures-util-preview/tests/mutex.rs b/rustc_deps/vendor/futures-util-preview/tests/mutex.rs
index 72f1157..50c5f61 100644
--- a/rustc_deps/vendor/futures-util-preview/tests/mutex.rs
+++ b/rustc_deps/vendor/futures-util-preview/tests/mutex.rs
@@ -1,4 +1,4 @@
-#![feature(async_await, await_macro, futures_api, pin)]
+#![feature(async_await, await_macro, futures_api)]
 
 use futures::channel::mpsc;
 use futures::future::{ready, FutureExt};
diff --git a/rustc_deps/vendor/futures-util-preview/tests/select_all.rs b/rustc_deps/vendor/futures-util-preview/tests/select_all.rs
new file mode 100644
index 0000000..85707fc
--- /dev/null
+++ b/rustc_deps/vendor/futures-util-preview/tests/select_all.rs
@@ -0,0 +1,33 @@
+#![feature(async_await, await_macro, futures_api)]
+
+use futures::future;
+use futures::FutureExt;
+use futures::task::Poll;
+use futures::stream::FusedStream;
+use futures::stream::{SelectAll, StreamExt};
+use futures_test::task::noop_local_waker_ref;
+
+#[test]
+fn is_terminated() {
+    let lw = noop_local_waker_ref();
+    let mut tasks = SelectAll::new();
+
+    assert_eq!(tasks.is_terminated(), false);
+    assert_eq!(tasks.poll_next_unpin(lw), Poll::Ready(None));
+    assert_eq!(tasks.is_terminated(), true);
+
+    // Test that the sentinel value doesn't leak
+    assert_eq!(tasks.is_empty(), true);
+    assert_eq!(tasks.len(), 0);
+
+    tasks.push(future::ready(1).into_stream());
+
+    assert_eq!(tasks.is_empty(), false);
+    assert_eq!(tasks.len(), 1);
+
+    assert_eq!(tasks.is_terminated(), false);
+    assert_eq!(tasks.poll_next_unpin(lw), Poll::Ready(Some(1)));
+    assert_eq!(tasks.is_terminated(), false);
+    assert_eq!(tasks.poll_next_unpin(lw), Poll::Ready(None));
+    assert_eq!(tasks.is_terminated(), true);
+}
diff --git a/rustc_deps/vendor/futures-util-preview/tests/select_next_some.rs b/rustc_deps/vendor/futures-util-preview/tests/select_next_some.rs
index 8e24ed3..926c898 100644
--- a/rustc_deps/vendor/futures-util-preview/tests/select_next_some.rs
+++ b/rustc_deps/vendor/futures-util-preview/tests/select_next_some.rs
@@ -1,4 +1,4 @@
-#![feature(async_await, await_macro, futures_api, pin)]
+#![feature(async_await, await_macro, futures_api)]
 
 use futures::{future, select};
 use futures::future::{FusedFuture, FutureExt};
diff --git a/rustc_deps/vendor/pin-utils/.cargo-checksum.json b/rustc_deps/vendor/pin-utils/.cargo-checksum.json
index d983e8c..0153ffc 100644
--- a/rustc_deps/vendor/pin-utils/.cargo-checksum.json
+++ b/rustc_deps/vendor/pin-utils/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"23484d5c1ed366dbcf8ef60f1c3a1cf616a6e632abdfaaefc89bfbbc2404812a","LICENSE-APACHE":"a4db788775cb25f2da419a7ccd3f1f89c3d2cfa8748fb25257596b88183b4c77","LICENSE-MIT":"28802412d2bfbafe432b305634413b41a984d30fba0df41d30aa2c8a2077c5b1","README.md":"bab25b8331b143f366421933c12f9ed39e0d9ed805a0c7e8cfa637eff9d600d4","src/lib.rs":"dda86ab58c545e64ed61b242ea99ea24f9e8a6af5679cc5017545323845f8951","src/projection.rs":"19817760b83ccf53437f8a118fec53e9bf48cf7b80a92541a5dd3c67ded5acca","src/stack_pin.rs":"8e148bb0e23ae47a79d00ad006e73bb2645c80802d9f6605b65e6a4aad2f3b6c","tests/projection.rs":"d039652cc581094b631e77e53ee1a32c340afd93fabc133aaaf27d0a75c2a75d","tests/stack_pin.rs":"73e819f5356b27d6e5b349e733d48bbac69f975980fb3ac56ebd202b4443040e"},"package":"42d42579e40cc2de14252a729e9727439657cf68a4997593aafe63728544ecb3"}
\ No newline at end of file
+{"files":{"Cargo.toml":"dca2f7b6e41d2712ab1d091f0d9db9da4736d63701b88954876380181238e5e4","LICENSE-APACHE":"a4db788775cb25f2da419a7ccd3f1f89c3d2cfa8748fb25257596b88183b4c77","LICENSE-MIT":"28802412d2bfbafe432b305634413b41a984d30fba0df41d30aa2c8a2077c5b1","README.md":"bab25b8331b143f366421933c12f9ed39e0d9ed805a0c7e8cfa637eff9d600d4","src/lib.rs":"7d08f5ff765b359a41ecf445c05b439653402964092a4edef119e8ea7b2c9b7d","src/projection.rs":"0193c90bca8f1b23580d19da13791bf8616c06931a0ea2f65bb91ea7e559dd13","src/stack_pin.rs":"c28b1fcb85e247a27156284dada1c9dd9c4982736477a0e22076287370ffdc68","tests/projection.rs":"04dd66b306e9d43d01a181da38add1ae8b8dee9e1fd16a3a0f39571cbb467f62","tests/stack_pin.rs":"a5153a9fb59d05513cf7c00f8ad66b57f72178f1e76de5476a00d602c44cffac"},"package":"5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/pin-utils/Cargo.toml b/rustc_deps/vendor/pin-utils/Cargo.toml
index 4b7a8e2..7992a83 100644
--- a/rustc_deps/vendor/pin-utils/Cargo.toml
+++ b/rustc_deps/vendor/pin-utils/Cargo.toml
@@ -10,12 +10,10 @@
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
-cargo-features = ["edition"]
-
 [package]
 edition = "2018"
 name = "pin-utils"
-version = "0.1.0-alpha.3"
+version = "0.1.0-alpha.4"
 authors = ["Josef Brandl <mail@josefbrandl.de>"]
 description = "Utilities for pinning\n"
 documentation = "https://docs.rs/pin-utils"
diff --git a/rustc_deps/vendor/pin-utils/src/lib.rs b/rustc_deps/vendor/pin-utils/src/lib.rs
index 10682ee..90434b5 100644
--- a/rustc_deps/vendor/pin-utils/src/lib.rs
+++ b/rustc_deps/vendor/pin-utils/src/lib.rs
@@ -1,7 +1,5 @@
 //! Utilities for pinning
 
-#![feature(pin)]
-
 #![no_std]
 #![warn(missing_docs, missing_debug_implementations)]
 #![deny(bare_trait_objects)]
diff --git a/rustc_deps/vendor/pin-utils/src/projection.rs b/rustc_deps/vendor/pin-utils/src/projection.rs
index 8ee6318..8abc99b 100644
--- a/rustc_deps/vendor/pin-utils/src/projection.rs
+++ b/rustc_deps/vendor/pin-utils/src/projection.rs
@@ -1,16 +1,17 @@
 /// A pinned projection of a struct field.
 ///
-/// To make using this macro safe, two things need to be ensured:
+/// To make using this macro safe, three things need to be ensured:
 /// - If the struct implements [`Drop`], the [`drop`] method is not allowed to
 ///   move the value of the field.
 /// - If the struct wants to implement [`Unpin`], it has to do so conditionally:
 ///   The struct can only implement [`Unpin`] if the field's type is [`Unpin`].
+/// - The struct must not be `#[repr(packed)]`.
 ///
 /// ```
-/// # #![feature(pin, arbitrary_self_types)]
-/// # use pin_utils::unsafe_pinned;
-/// # use std::pin::Pin;
-/// # use std::marker::Unpin;
+/// use pin_utils::unsafe_pinned;
+/// use std::marker::Unpin;
+/// use std::pin::Pin;
+///
 /// struct Foo<T> {
 ///     field: T,
 /// }
@@ -26,17 +27,20 @@
 /// impl<T: Unpin> Unpin for Foo<T> {} // Conditional Unpin impl
 /// ```
 ///
+/// Note that borrowing the field multiple times requires using `.as_mut()` to
+/// avoid consuming the `Pin`.
+///
 /// [`Unpin`]: core::marker::Unpin
 /// [`drop`]: Drop::drop
 #[macro_export]
 macro_rules! unsafe_pinned {
     ($f:tt: $t:ty) => (
         fn $f<'__a>(
-            self: &'__a mut $crate::core_reexport::pin::Pin<&mut Self>
+            self: $crate::core_reexport::pin::Pin<&'__a mut Self>
         ) -> $crate::core_reexport::pin::Pin<&'__a mut $t> {
             unsafe {
                 $crate::core_reexport::pin::Pin::map_unchecked_mut(
-                    self.as_mut(), |x| &mut x.$f
+                    self, |x| &mut x.$f
                 )
             }
         }
@@ -50,11 +54,14 @@
 /// that the contained value can be considered not pinned in the current
 /// context.
 ///
+/// Note that borrowing the field multiple times requires using `.as_mut()` to
+/// avoid consuming the `Pin`.
+///
 /// ```
-/// # #![feature(pin, arbitrary_self_types)]
-/// # use pin_utils::unsafe_unpinned;
-/// # use std::pin::Pin;
-/// # struct Bar;
+/// use pin_utils::unsafe_unpinned;
+/// use std::pin::Pin;
+///
+/// struct Bar;
 /// struct Foo {
 ///     field: Bar,
 /// }
@@ -71,12 +78,10 @@
 macro_rules! unsafe_unpinned {
     ($f:tt: $t:ty) => (
         fn $f<'__a>(
-            self: &'__a mut $crate::core_reexport::pin::Pin<&mut Self>
+            self: $crate::core_reexport::pin::Pin<&'__a mut Self>
         ) -> &'__a mut $t {
             unsafe {
-                &mut $crate::core_reexport::pin::Pin::get_mut_unchecked(
-                    self.as_mut()
-                ).$f
+                &mut $crate::core_reexport::pin::Pin::get_unchecked_mut(self).$f
             }
         }
     )
diff --git a/rustc_deps/vendor/pin-utils/src/stack_pin.rs b/rustc_deps/vendor/pin-utils/src/stack_pin.rs
index 0ac1df1..997a5b9 100644
--- a/rustc_deps/vendor/pin-utils/src/stack_pin.rs
+++ b/rustc_deps/vendor/pin-utils/src/stack_pin.rs
@@ -1,7 +1,6 @@
 /// Pins a value on the stack.
 ///
 /// ```
-/// # #![feature(pin)]
 /// # use pin_utils::pin_mut;
 /// # use core::pin::Pin;
 /// # struct Foo {}
diff --git a/rustc_deps/vendor/pin-utils/tests/projection.rs b/rustc_deps/vendor/pin-utils/tests/projection.rs
index 1233603..492c26d 100644
--- a/rustc_deps/vendor/pin-utils/tests/projection.rs
+++ b/rustc_deps/vendor/pin-utils/tests/projection.rs
@@ -1,4 +1,3 @@
-#![feature(pin, arbitrary_self_types)]
 use pin_utils::{unsafe_pinned, unsafe_unpinned, pin_mut};
 use std::pin::Pin;
 use std::marker::Unpin;
@@ -20,9 +19,9 @@
     let foo = Foo { field1: 1, field2: 2 };
     pin_mut!(foo);
 
-    let x1: Pin<&mut i32> = foo.field1();
+    let x1: Pin<&mut i32> = foo.as_mut().field1();
     assert_eq!(*x1, 1);
 
-    let x2: &mut i32 = foo.field2();
+    let x2: &mut i32 = foo.as_mut().field2();
     assert_eq!(*x2, 2);
 }
diff --git a/rustc_deps/vendor/pin-utils/tests/stack_pin.rs b/rustc_deps/vendor/pin-utils/tests/stack_pin.rs
index 4cb12f9..0708a7d 100644
--- a/rustc_deps/vendor/pin-utils/tests/stack_pin.rs
+++ b/rustc_deps/vendor/pin-utils/tests/stack_pin.rs
@@ -1,4 +1,3 @@
-#![feature(pin)]
 use pin_utils::pin_mut;
 use core::pin::Pin;
 
diff --git a/rustc_deps/vendor/proc-macro-hack/.cargo-checksum.json b/rustc_deps/vendor/proc-macro-hack/.cargo-checksum.json
new file mode 100644
index 0000000..d6e53b8
--- /dev/null
+++ b/rustc_deps/vendor/proc-macro-hack/.cargo-checksum.json
@@ -0,0 +1 @@
+{"files":{"Cargo.toml":"b1e4dd8dba8eae63f032ec975f70b3c43283b1f1e55ebba6f5b9d6c5b97786f3","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"d59d2723bbc1627b629429a9c779d5dcfde579c9723e6ded1052931c4e8efa0a","README.md":"064f0b163c2dff76b187c262a3e3ae5d8c4a7176bcbc06afad8c349651c39e9c","src/lib.rs":"aad5e853af1c0ff4dfd8ecfb02096233648e6e649b840a9c6c6c1d28084f1274"},"package":"539145c26064b6a98030ef04295da99739904b152ad17eed218d5728fcf9b370"}
\ No newline at end of file
diff --git a/rustc_deps/vendor/proc-macro-hack/Cargo.toml b/rustc_deps/vendor/proc-macro-hack/Cargo.toml
new file mode 100644
index 0000000..7664136
--- /dev/null
+++ b/rustc_deps/vendor/proc-macro-hack/Cargo.toml
@@ -0,0 +1,41 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g. crates.io) dependencies
+#
+# If you believe there's an error in this file please file an
+# issue against the rust-lang/cargo repository. If you're
+# editing this file be aware that the upstream Cargo.toml
+# will likely look very different (and much more reasonable)
+
+[package]
+name = "proc-macro-hack"
+version = "0.5.3"
+authors = ["David Tolnay <dtolnay@gmail.com>"]
+description = "Procedural macros in expression position"
+readme = "README.md"
+categories = ["development-tools::procedural-macro-helpers"]
+license = "MIT/Apache-2.0"
+repository = "https://github.com/dtolnay/proc-macro-hack"
+
+[lib]
+proc-macro = true
+[dependencies.proc-macro2]
+version = "0.4.19"
+
+[dependencies.quote]
+version = "0.6.8"
+
+[dependencies.syn]
+version = "0.15.14"
+features = ["proc-macro", "parsing", "printing"]
+default-features = false
+[dev-dependencies.demo-hack]
+version = "0.0.5"
+
+[dev-dependencies.demo-hack-impl]
+version = "0.0.5"
+[badges.travis-ci]
+repository = "dtolnay/proc-macro-hack"
diff --git a/rustc_deps/vendor/proc-macro-hack/LICENSE-APACHE b/rustc_deps/vendor/proc-macro-hack/LICENSE-APACHE
new file mode 100644
index 0000000..16fe87b
--- /dev/null
+++ b/rustc_deps/vendor/proc-macro-hack/LICENSE-APACHE
@@ -0,0 +1,201 @@
+                              Apache License
+                        Version 2.0, January 2004
+                     http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+   "License" shall mean the terms and conditions for use, reproduction,
+   and distribution as defined by Sections 1 through 9 of this document.
+
+   "Licensor" shall mean the copyright owner or entity authorized by
+   the copyright owner that is granting the License.
+
+   "Legal Entity" shall mean the union of the acting entity and all
+   other entities that control, are controlled by, or are under common
+   control with that entity. For the purposes of this definition,
+   "control" means (i) the power, direct or indirect, to cause the
+   direction or management of such entity, whether by contract or
+   otherwise, or (ii) ownership of fifty percent (50%) or more of the
+   outstanding shares, or (iii) beneficial ownership of such entity.
+
+   "You" (or "Your") shall mean an individual or Legal Entity
+   exercising permissions granted by this License.
+
+   "Source" form shall mean the preferred form for making modifications,
+   including but not limited to software source code, documentation
+   source, and configuration files.
+
+   "Object" form shall mean any form resulting from mechanical
+   transformation or translation of a Source form, including but
+   not limited to compiled object code, generated documentation,
+   and conversions to other media types.
+
+   "Work" shall mean the work of authorship, whether in Source or
+   Object form, made available under the License, as indicated by a
+   copyright notice that is included in or attached to the work
+   (an example is provided in the Appendix below).
+
+   "Derivative Works" shall mean any work, whether in Source or Object
+   form, that is based on (or derived from) the Work and for which the
+   editorial revisions, annotations, elaborations, or other modifications
+   represent, as a whole, an original work of authorship. For the purposes
+   of this License, Derivative Works shall not include works that remain
+   separable from, or merely link (or bind by name) to the interfaces of,
+   the Work and Derivative Works thereof.
+
+   "Contribution" shall mean any work of authorship, including
+   the original version of the Work and any modifications or additions
+   to that Work or Derivative Works thereof, that is intentionally
+   submitted to Licensor for inclusion in the Work by the copyright owner
+   or by an individual or Legal Entity authorized to submit on behalf of
+   the copyright owner. For the purposes of this definition, "submitted"
+   means any form of electronic, verbal, or written communication sent
+   to the Licensor or its representatives, including but not limited to
+   communication on electronic mailing lists, source code control systems,
+   and issue tracking systems that are managed by, or on behalf of, the
+   Licensor for the purpose of discussing and improving the Work, but
+   excluding communication that is conspicuously marked or otherwise
+   designated in writing by the copyright owner as "Not a Contribution."
+
+   "Contributor" shall mean Licensor and any individual or Legal Entity
+   on behalf of whom a Contribution has been received by Licensor and
+   subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   copyright license to reproduce, prepare Derivative Works of,
+   publicly display, publicly perform, sublicense, and distribute the
+   Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   (except as stated in this section) patent license to make, have made,
+   use, offer to sell, sell, import, and otherwise transfer the Work,
+   where such license applies only to those patent claims licensable
+   by such Contributor that are necessarily infringed by their
+   Contribution(s) alone or by combination of their Contribution(s)
+   with the Work to which such Contribution(s) was submitted. If You
+   institute patent litigation against any entity (including a
+   cross-claim or counterclaim in a lawsuit) alleging that the Work
+   or a Contribution incorporated within the Work constitutes direct
+   or contributory patent infringement, then any patent licenses
+   granted to You under this License for that Work shall terminate
+   as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+   Work or Derivative Works thereof in any medium, with or without
+   modifications, and in Source or Object form, provided that You
+   meet the following conditions:
+
+   (a) You must give any other recipients of the Work or
+       Derivative Works a copy of this License; and
+
+   (b) You must cause any modified files to carry prominent notices
+       stating that You changed the files; and
+
+   (c) You must retain, in the Source form of any Derivative Works
+       that You distribute, all copyright, patent, trademark, and
+       attribution notices from the Source form of the Work,
+       excluding those notices that do not pertain to any part of
+       the Derivative Works; and
+
+   (d) If the Work includes a "NOTICE" text file as part of its
+       distribution, then any Derivative Works that You distribute must
+       include a readable copy of the attribution notices contained
+       within such NOTICE file, excluding those notices that do not
+       pertain to any part of the Derivative Works, in at least one
+       of the following places: within a NOTICE text file distributed
+       as part of the Derivative Works; within the Source form or
+       documentation, if provided along with the Derivative Works; or,
+       within a display generated by the Derivative Works, if and
+       wherever such third-party notices normally appear. The contents
+       of the NOTICE file are for informational purposes only and
+       do not modify the License. You may add Your own attribution
+       notices within Derivative Works that You distribute, alongside
+       or as an addendum to the NOTICE text from the Work, provided
+       that such additional attribution notices cannot be construed
+       as modifying the License.
+
+   You may add Your own copyright statement to Your modifications and
+   may provide additional or different license terms and conditions
+   for use, reproduction, or distribution of Your modifications, or
+   for any such Derivative Works as a whole, provided Your use,
+   reproduction, and distribution of the Work otherwise complies with
+   the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+   any Contribution intentionally submitted for inclusion in the Work
+   by You to the Licensor shall be under the terms and conditions of
+   this License, without any additional terms or conditions.
+   Notwithstanding the above, nothing herein shall supersede or modify
+   the terms of any separate license agreement you may have executed
+   with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+   names, trademarks, service marks, or product names of the Licensor,
+   except as required for reasonable and customary use in describing the
+   origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+   agreed to in writing, Licensor provides the Work (and each
+   Contributor provides its Contributions) on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+   implied, including, without limitation, any warranties or conditions
+   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+   PARTICULAR PURPOSE. You are solely responsible for determining the
+   appropriateness of using or redistributing the Work and assume any
+   risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+   whether in tort (including negligence), contract, or otherwise,
+   unless required by applicable law (such as deliberate and grossly
+   negligent acts) or agreed to in writing, shall any Contributor be
+   liable to You for damages, including any direct, indirect, special,
+   incidental, or consequential damages of any character arising as a
+   result of this License or out of the use or inability to use the
+   Work (including but not limited to damages for loss of goodwill,
+   work stoppage, computer failure or malfunction, or any and all
+   other commercial damages or losses), even if such Contributor
+   has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+   the Work or Derivative Works thereof, You may choose to offer,
+   and charge a fee for, acceptance of support, warranty, indemnity,
+   or other liability obligations and/or rights consistent with this
+   License. However, in accepting such obligations, You may act only
+   on Your own behalf and on Your sole responsibility, not on behalf
+   of any other Contributor, and only if You agree to indemnify,
+   defend, and hold each Contributor harmless for any liability
+   incurred by, or claims asserted against, such Contributor by reason
+   of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+   To apply the Apache License to your work, attach the following
+   boilerplate notice, with the fields enclosed by brackets "[]"
+   replaced with your own identifying information. (Don't include
+   the brackets!)  The text should be enclosed in the appropriate
+   comment syntax for the file format. We also recommend that a
+   file or class name and description of purpose be included on the
+   same "printed page" as the copyright notice for easier
+   identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+	http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/rustc_deps/vendor/proc-macro-hack/LICENSE-MIT b/rustc_deps/vendor/proc-macro-hack/LICENSE-MIT
new file mode 100644
index 0000000..f2675cd
--- /dev/null
+++ b/rustc_deps/vendor/proc-macro-hack/LICENSE-MIT
@@ -0,0 +1,25 @@
+Copyright (c) 2018 David Tolnay
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/rustc_deps/vendor/proc-macro-hack/README.md b/rustc_deps/vendor/proc-macro-hack/README.md
new file mode 100644
index 0000000..bb43e55
--- /dev/null
+++ b/rustc_deps/vendor/proc-macro-hack/README.md
@@ -0,0 +1,128 @@
+Procedural macros in expression position
+========================================
+
+[![Build Status](https://api.travis-ci.org/dtolnay/proc-macro-hack.svg?branch=master)](https://travis-ci.org/dtolnay/proc-macro-hack)
+[![Latest Version](https://img.shields.io/crates/v/proc-macro-hack.svg)](https://crates.io/crates/proc-macro-hack)
+
+As of Rust 1.30, the language supports user-defined function-like procedural
+macros. However these can only be invoked in item position, not in
+statements or expressions.
+
+This crate implements an alternative type of procedural macro that can be
+invoked in statement or expression position.
+
+This approach works with any stable or nightly Rust version 1.30+.
+
+## Defining procedural macros
+
+Two crates are required to define a procedural macro.
+
+### The implementation crate
+
+This crate must contain nothing but procedural macros. Private helper
+functions and private modules are fine but nothing can be public.
+
+[> example of an implementation crate][demo-hack-impl]
+
+Just like you would use a #\[proc_macro\] attribute to define a natively
+supported procedural macro, use proc-macro-hack's #\[proc_macro_hack\]
+attribute to define a procedural macro that works in expression position.
+The function signature is the same as for ordinary function-like procedural
+macros.
+
+```rust
+extern crate proc_macro;
+extern crate proc_macro_hack;
+extern crate quote;
+extern crate syn;
+
+use proc_macro::TokenStream;
+use proc_macro_hack::proc_macro_hack;
+use quote::quote;
+use syn::{parse_macro_input, Expr};
+
+/// Add one to an expression.
+#[proc_macro_hack]
+pub fn add_one(input: TokenStream) -> TokenStream {
+    let expr = parse_macro_input!(input as Expr);
+    TokenStream::from(quote! {
+        1 + (#expr)
+    })
+}
+```
+
+### The declaration crate
+
+This crate is allowed to contain other public things if you need, for
+example traits or functions or ordinary macros.
+
+[> example of a declaration crate][demo-hack]
+
+Within the declaration crate there needs to be a re-export of your
+procedural macro from the implementation crate. The re-export also carries a
+\#\[proc_macro_hack\] attribute.
+
+```rust
+extern crate demo_hack_impl;
+extern crate proc_macro_hack;
+
+use proc_macro_hack::proc_macro_hack;
+
+/// Add one to an expression.
+#[proc_macro_hack]
+pub use demo_hack_impl::add_one;
+```
+
+Both crates depend on `proc-macro-hack`:
+
+```toml
+[dependencies]
+proc-macro-hack = "0.5"
+```
+
+Additionally, your implementation crate (but not your declaration crate) is
+a proc macro crate:
+
+```toml
+[lib]
+proc-macro = true
+```
+
+## Using procedural macros
+
+Users of your crate depend on your declaration crate (not your
+implementation crate), then use your procedural macros as usual.
+
+[> example of a downstream crate][example]
+
+```rust
+extern crate demo_hack;
+use demo_hack::add_one;
+
+fn main() {
+    let two = 2;
+    let nine = add_one!(two) + add_one!(2 + 3);
+    println!("nine = {}", nine);
+}
+```
+
+[demo-hack-impl]: https://github.com/dtolnay/proc-macro-hack/tree/master/demo-hack-impl
+[demo-hack]: https://github.com/dtolnay/proc-macro-hack/tree/master/demo-hack
+[example]: https://github.com/dtolnay/proc-macro-hack/tree/master/example
+
+<br>
+
+#### License
+
+<sup>
+Licensed under either of <a href="LICENSE-APACHE">Apache License, Version
+2.0</a> or <a href="LICENSE-MIT">MIT license</a> at your option.
+</sup>
+
+<br>
+
+<sub>
+Unless you explicitly state otherwise, any contribution intentionally submitted
+for inclusion in this hack by you, as defined in the Apache-2.0 license, shall
+be dual licensed as above, without any additional terms or conditions.
+</sub>
diff --git a/rustc_deps/vendor/proc-macro-hack/src/lib.rs b/rustc_deps/vendor/proc-macro-hack/src/lib.rs
new file mode 100644
index 0000000..238e54e
--- /dev/null
+++ b/rustc_deps/vendor/proc-macro-hack/src/lib.rs
@@ -0,0 +1,524 @@
+//! As of Rust 1.30, the language supports user-defined function-like procedural
+//! macros. However these can only be invoked in item position, not in
+//! statements or expressions.
+//!
+//! This crate implements an alternative type of procedural macro that can be
+//! invoked in statement or expression position.
+//!
+//! # Defining procedural macros
+//!
+//! Two crates are required to define a procedural macro.
+//!
+//! ## The implementation crate
+//!
+//! This crate must contain nothing but procedural macros. Private helper
+//! functions and private modules are fine but nothing can be public.
+//!
+//! [> example of an implementation crate][demo-hack-impl]
+//!
+//! Just like you would use a #\[proc_macro\] attribute to define a natively
+//! supported procedural macro, use proc-macro-hack's #\[proc_macro_hack\]
+//! attribute to define a procedural macro that works in expression position.
+//! The function signature is the same as for ordinary function-like procedural
+//! macros.
+//!
+//! ```rust
+//! extern crate proc_macro;
+//! extern crate proc_macro_hack;
+//! extern crate quote;
+//! extern crate syn;
+//!
+//! use proc_macro::TokenStream;
+//! use proc_macro_hack::proc_macro_hack;
+//! use quote::quote;
+//! use syn::{parse_macro_input, Expr};
+//!
+//! /// Add one to an expression.
+//! # const IGNORE: &str = stringify! {
+//! #[proc_macro_hack]
+//! # };
+//! pub fn add_one(input: TokenStream) -> TokenStream {
+//!     let expr = parse_macro_input!(input as Expr);
+//!     TokenStream::from(quote! {
+//!         1 + (#expr)
+//!     })
+//! }
+//! #
+//! # fn main() {}
+//! ```
+//!
+//! ## The declaration crate
+//!
+//! This crate is allowed to contain other public things if you need, for
+//! example traits or functions or ordinary macros.
+//!
+//! [> example of a declaration crate][demo-hack]
+//!
+//! Within the declaration crate there needs to be a re-export of your
+//! procedural macro from the implementation crate. The re-export also carries a
+//! \#\[proc_macro_hack\] attribute.
+//!
+//! ```rust
+//! extern crate demo_hack_impl;
+//! extern crate proc_macro_hack;
+//!
+//! use proc_macro_hack::proc_macro_hack;
+//!
+//! /// Add one to an expression.
+//! #[proc_macro_hack]
+//! pub use demo_hack_impl::add_one;
+//! #
+//! # fn main() {}
+//! ```
+//!
+//! Both crates depend on `proc-macro-hack`:
+//!
+//! ```toml
+//! [dependencies]
+//! proc-macro-hack = "0.5"
+//! ```
+//!
+//! Additionally, your implementation crate (but not your declaration crate) is
+//! a proc macro crate:
+//!
+//! ```toml
+//! [lib]
+//! proc-macro = true
+//! ```
+//!
+//! # Using procedural macros
+//!
+//! Users of your crate depend on your declaration crate (not your
+//! implementation crate), then use your procedural macros as usual.
+//!
+//! [> example of a downstream crate][example]
+//!
+//! ```rust
+//! extern crate demo_hack;
+//! use demo_hack::add_one;
+//!
+//! fn main() {
+//!     let two = 2;
+//!     let nine = add_one!(two) + add_one!(2 + 3);
+//!     println!("nine = {}", nine);
+//! }
+//! ```
+//!
+//! [demo-hack-impl]: https://github.com/dtolnay/proc-macro-hack/tree/master/demo-hack-impl
+//! [demo-hack]: https://github.com/dtolnay/proc-macro-hack/tree/master/demo-hack
+//! [example]: https://github.com/dtolnay/proc-macro-hack/tree/master/example
+
+#![recursion_limit = "512"]
+#![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))]
+#![cfg_attr(feature = "cargo-clippy", allow(needless_pass_by_value))]
+
+extern crate proc_macro;
+extern crate proc_macro2;
+extern crate quote;
+extern crate syn;
+
+use std::fmt::Write;
+
+use proc_macro2::{Span, TokenStream, TokenTree};
+use quote::{quote, ToTokens};
+use syn::parse::{Parse, ParseStream, Result};
+use syn::{braced, bracketed, parenthesized, parse_macro_input, token, Ident, Token};
+
+type Visibility = Option<Token![pub]>;
+
+enum Input {
+    Export(Export),
+    Define(Define),
+}
+
+// pub use demo_hack_impl::{m1, m2 as qrst};
+struct Export {
+    attrs: TokenStream,
+    vis: Visibility,
+    from: Ident,
+    macros: Vec<Macro>,
+}
+
+// pub fn m1(input: TokenStream) -> TokenStream { ... }
+struct Define {
+    attrs: TokenStream,
+    name: Ident,
+    body: TokenStream,
+}
+
+struct Macro {
+    name: Ident,
+    export_as: Ident,
+}
+
+impl Parse for Input {
+    fn parse(input: ParseStream) -> Result<Self> {
+        let ahead = input.fork();
+        parse_attributes(&ahead)?;
+        ahead.parse::<Visibility>()?;
+
+        if ahead.peek(Token![use]) {
+            input.parse().map(Input::Export)
+        } else if ahead.peek(Token![fn]) {
+            input.parse().map(Input::Define)
+        } else {
+            Err(input.error("unexpected input to #[proc_macro_hack]"))
+        }
+    }
+}
+
+impl Parse for Export {
+    fn parse(input: ParseStream) -> Result<Self> {
+        let attrs = input.call(parse_attributes)?;
+        let vis: Visibility = input.parse()?;
+        input.parse::<Token![use]>()?;
+        let from: Ident = input.parse()?;
+        input.parse::<Token![::]>()?;
+
+        let mut macros = Vec::new();
+        if input.peek(token::Brace) {
+            let content;
+            braced!(content in input);
+            loop {
+                macros.push(content.parse()?);
+                if content.is_empty() {
+                    break;
+                }
+                content.parse::<Token![,]>()?;
+                if content.is_empty() {
+                    break;
+                }
+            }
+        } else {
+            macros.push(input.parse()?);
+        }
+
+        input.parse::<Token![;]>()?;
+        Ok(Export { attrs, vis, from, macros })
+    }
+}
+
+impl Parse for Define {
+    fn parse(input: ParseStream) -> Result<Self> {
+        let attrs = input.call(parse_attributes)?;
+        let vis: Visibility = input.parse()?;
+        if vis.is_none() {
+            return Err(input.error("functions tagged with `#[proc_macro_hack]` must be `pub`"));
+        }
+
+        input.parse::<Token![fn]>()?;
+        let name: Ident = input.parse()?;
+        let body: TokenStream = input.parse()?;
+        Ok(Define { attrs, name, body })
+    }
+}
+
+impl Parse for Macro {
+    fn parse(input: ParseStream) -> Result<Self> {
+        let name: Ident = input.parse()?;
+        let renamed: Option<Token![as]> = input.parse()?;
+        let export_as = if renamed.is_some() {
+            input.parse()?
+        } else {
+            name.clone()
+        };
+        Ok(Macro { name, export_as })
+    }
+}
+
+fn parse_attributes(input: ParseStream) -> Result<TokenStream> {
+    let mut attrs = TokenStream::new();
+    while input.peek(Token![#]) {
+        let pound: Token![#] = input.parse()?;
+        pound.to_tokens(&mut attrs);
+        let content;
+        let bracket_token = bracketed!(content in input);
+        let content: TokenStream = content.parse()?;
+        bracket_token.surround(&mut attrs, |tokens| content.to_tokens(tokens));
+    }
+    Ok(attrs)
+}
+
+#[proc_macro_attribute]
+pub fn proc_macro_hack(
+    args: proc_macro::TokenStream,
+    input: proc_macro::TokenStream,
+) -> proc_macro::TokenStream {
+    proc_macro::TokenStream::from(match parse_macro_input!(input) {
+        Input::Export(export) => {
+            let args = parse_macro_input!(args as ExportArgs);
+            expand_export(export, args)
+        }
+        Input::Define(define) => {
+            parse_macro_input!(args as DefineArgs);
+            expand_define(define)
+        }
+    })
+}
+
+mod kw {
+    syn::custom_keyword!(support_nested);
+}
+
+struct ExportArgs {
+    support_nested: bool,
+}
+
+impl Parse for ExportArgs {
+    fn parse(input: ParseStream) -> Result<Self> {
+        Ok(ExportArgs {
+            support_nested: input.parse::<Option<kw::support_nested>>()?.is_some(),
+        })
+    }
+}
+
+struct DefineArgs;
+
+impl Parse for DefineArgs {
+    fn parse(_input: ParseStream) -> Result<Self> {
+        Ok(DefineArgs)
+    }
+}
+
+struct EnumHack {
+    token_stream: TokenStream,
+}
+
+impl Parse for EnumHack {
+    fn parse(input: ParseStream) -> Result<Self> {
+        input.parse::<Token![enum]>()?;
+        input.parse::<Ident>()?;
+
+        let braces;
+        braced!(braces in input);
+        braces.parse::<Ident>()?;
+        braces.parse::<Token![=]>()?;
+
+        let parens;
+        parenthesized!(parens in braces);
+        parens.parse::<Ident>()?;
+        parens.parse::<Token![!]>()?;
+
+        let inner;
+        braced!(inner in parens);
+        let token_stream: TokenStream = inner.parse()?;
+
+        parens.parse::<Token![,]>()?;
+        parens.parse::<TokenTree>()?;
+        braces.parse::<Token![.]>()?;
+        braces.parse::<TokenTree>()?;
+        braces.parse::<Token![,]>()?;
+
+        Ok(EnumHack { token_stream })
+    }
+}
+
+#[doc(hidden)]
+#[proc_macro_derive(ProcMacroHack)]
+pub fn enum_hack(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
+    let inner = parse_macro_input!(input as EnumHack);
+    proc_macro::TokenStream::from(inner.token_stream)
+}
+
+fn expand_export(export: Export, args: ExportArgs) -> TokenStream {
+    let dummy = dummy_name_for_export(&export);
+
+    let attrs = export.attrs;
+    let vis = export.vis;
+    let macro_export = match vis {
+        Some(_) => quote!(#[macro_export]),
+        None => quote!(),
+    };
+    let crate_prefix = match vis {
+        Some(_) => quote!($crate::),
+        None => quote!(),
+    };
+    let enum_variant = if args.support_nested {
+        quote!(Nested)
+    } else {
+        quote!(Value)
+    };
+
+    let from = export.from;
+    let rules = export
+        .macros
+        .into_iter()
+        .map(|Macro { name, export_as }| {
+            let actual_name = actual_proc_macro_name(&name);
+            let dispatch = dispatch_macro_name(&name);
+
+            let export_dispatch = if args.support_nested {
+                Some(quote! {
+                    #[doc(hidden)]
+                    #vis use proc_macro_nested::dispatch as #dispatch;
+                })
+            } else {
+                None
+            };
+
+            let proc_macro_call = if args.support_nested {
+                quote! {
+                    #crate_prefix #dispatch! { ($($proc_macro)*) }
+                }
+            } else {
+                quote! {
+                    proc_macro_call!()
+                }
+            };
+
+            quote! {
+                #[doc(hidden)]
+                #vis use #from::#actual_name;
+
+                #export_dispatch
+
+                #attrs
+                #macro_export
+                macro_rules! #export_as {
+                    ($($proc_macro:tt)*) => {{
+                        #[derive(#crate_prefix #actual_name)]
+                        enum ProcMacroHack {
+                            #enum_variant = (stringify! { $($proc_macro)* }, 0).1,
+                        }
+                        #proc_macro_call
+                    }};
+                }
+            }
+        })
+        .collect();
+
+    wrap_in_enum_hack(dummy, rules)
+}
+
+fn expand_define(define: Define) -> TokenStream {
+    let attrs = define.attrs;
+    let name = define.name;
+    let dummy = actual_proc_macro_name(&name);
+    let body = define.body;
+
+    quote! {
+        mod #dummy {
+            extern crate proc_macro;
+            pub use self::proc_macro::*;
+        }
+
+        #attrs
+        #[proc_macro_derive(#dummy)]
+        pub fn #dummy(input: #dummy::TokenStream) -> #dummy::TokenStream {
+            use std::iter::FromIterator;
+
+            let mut iter = input.into_iter();
+            iter.next().unwrap(); // `enum`
+            iter.next().unwrap(); // `ProcMacroHack`
+
+            let mut braces = match iter.next().unwrap() {
+                #dummy::TokenTree::Group(group) => group.stream().into_iter(),
+                _ => unimplemented!(),
+            };
+            let variant = braces.next().unwrap(); // `Value` or `Nested`
+            let support_nested = variant.to_string() == "Nested";
+            braces.next().unwrap(); // `=`
+
+            let mut parens = match braces.next().unwrap() {
+                #dummy::TokenTree::Group(group) => group.stream().into_iter(),
+                _ => unimplemented!(),
+            };
+            parens.next().unwrap(); // `stringify`
+            parens.next().unwrap(); // `!`
+
+            let inner = match parens.next().unwrap() {
+                #dummy::TokenTree::Group(group) => group.stream(),
+                _ => unimplemented!(),
+            };
+
+            let output: #dummy::TokenStream = #name(inner.clone());
+
+            fn count_bangs(input: #dummy::TokenStream) -> usize {
+                let mut count = 0;
+                for token in input {
+                    match token {
+                        #dummy::TokenTree::Punct(punct) => {
+                            if punct.as_char() == '!' {
+                                count += 1;
+                            }
+                        }
+                        #dummy::TokenTree::Group(group) => {
+                            count += count_bangs(group.stream());
+                        }
+                        _ => {}
+                    }
+                }
+                count
+            }
+
+            // macro_rules! proc_macro_call {
+            //     () => { #output }
+            // }
+            #dummy::TokenStream::from_iter(vec![
+                #dummy::TokenTree::Ident(
+                    #dummy::Ident::new("macro_rules", #dummy::Span::call_site()),
+                ),
+                #dummy::TokenTree::Punct(
+                    #dummy::Punct::new('!', #dummy::Spacing::Alone),
+                ),
+                #dummy::TokenTree::Ident(
+                    #dummy::Ident::new(
+                        &if support_nested {
+                            format!("proc_macro_call_{}", count_bangs(inner))
+                        } else {
+                            String::from("proc_macro_call")
+                        },
+                        #dummy::Span::call_site(),
+                    ),
+                ),
+                #dummy::TokenTree::Group(
+                    #dummy::Group::new(#dummy::Delimiter::Brace, #dummy::TokenStream::from_iter(vec![
+                        #dummy::TokenTree::Group(
+                            #dummy::Group::new(#dummy::Delimiter::Parenthesis, #dummy::TokenStream::new()),
+                        ),
+                        #dummy::TokenTree::Punct(
+                            #dummy::Punct::new('=', #dummy::Spacing::Joint),
+                        ),
+                        #dummy::TokenTree::Punct(
+                            #dummy::Punct::new('>', #dummy::Spacing::Alone),
+                        ),
+                        #dummy::TokenTree::Group(
+                            #dummy::Group::new(#dummy::Delimiter::Brace, output),
+                        ),
+                    ])),
+                ),
+            ])
+        }
+
+        fn #name #body
+    }
+}
+
+fn actual_proc_macro_name(conceptual: &Ident) -> Ident {
+    let actual_name = format!("proc_macro_hack_{}", conceptual);
+    Ident::new(&actual_name, Span::call_site())
+}
+
+fn dispatch_macro_name(conceptual: &Ident) -> Ident {
+    let dispatch = format!("proc_macro_call_{}", conceptual);
+    Ident::new(&dispatch, Span::call_site())
+}
+
+fn dummy_name_for_export(export: &Export) -> String {
+    let mut dummy = String::new();
+    write!(dummy, "_{}{}", export.from.to_string().len(), export.from).unwrap();
+    for m in &export.macros {
+        write!(dummy, "_{}{}", m.name.to_string().len(), m.name).unwrap();
+    }
+    dummy
+}
+
+fn wrap_in_enum_hack(dummy: String, inner: TokenStream) -> TokenStream {
+    let dummy = Ident::new(&dummy, Span::call_site());
+    quote! {
+        #[derive(proc_macro_hack::ProcMacroHack)]
+        enum #dummy {
+            Value = (stringify! { #inner }, 0).1,
+        }
+    }
+}