about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2019-08-20 18:33:16 +0000
committerbors <bors@rust-lang.org>2019-08-20 18:33:16 +0000
commitbea0372a1a7a31b81f28cc4d9a83a2dc9a79d008 (patch)
tree49f35638545ccd98762e91fc712d09533ad869e5 /src
parent5a56e05abd34e1936df74625c1f40cb6fee0cd4a (diff)
parente3e8b7f12a5cdf4dbd3fa8a4a39b1bd4bce13d82 (diff)
downloadrust-bea0372a1a7a31b81f28cc4d9a83a2dc9a79d008.tar.gz
rust-bea0372a1a7a31b81f28cc4d9a83a2dc9a79d008.zip
Auto merge of #63752 - Centril:rollup-nlxwety, r=Centril
Rollup of 4 pull requests

Successful merges:

 - #62497 (Fix double resolving custom libdir)
 - #63209 (Stabilize `async_await` in Rust 1.39.0)
 - #63746 (Cherry-pick src/test changes with Centril's changes)
 - #63750 (rustc_metadata: replace LazySeq<T> with Lazy<[T]>.)

Failed merges:

r? @ghost
Diffstat (limited to 'src')
-rw-r--r--src/bootstrap/builder.rs20
-rw-r--r--src/bootstrap/dist.rs13
-rw-r--r--src/librustc/error_codes.rs2
-rw-r--r--src/librustc_metadata/cstore.rs8
-rw-r--r--src/librustc_metadata/decoder.rs35
-rw-r--r--src/librustc_metadata/encoder.rs391
-rw-r--r--src/librustc_metadata/index.rs10
-rw-r--r--src/librustc_metadata/schema.rs153
-rw-r--r--src/librustc_typeck/check/mod.rs2
-rw-r--r--src/librustc_typeck/error_codes.rs7
-rw-r--r--src/libstd/keyword_docs.rs2
-rw-r--r--src/libsyntax/feature_gate.rs19
-rw-r--r--src/test/codegen/issue-45222.rs3
-rw-r--r--src/test/incremental/hashes/call_expressions.rs18
-rw-r--r--src/test/incremental/hashes/closure_expressions.rs12
-rw-r--r--src/test/incremental/hashes/consts.rs12
-rw-r--r--src/test/incremental/hashes/if_expressions.rs16
-rw-r--r--src/test/incremental/hashes/indexing_expressions.rs14
-rw-r--r--src/test/incremental/hashes/inline_asm.rs12
-rw-r--r--src/test/incremental/hashes/loop_expressions.rs16
-rw-r--r--src/test/incremental/hashes/panic_exprs.rs18
-rw-r--r--src/test/incremental/hashes/statics.rs20
-rw-r--r--src/test/incremental/hashes/struct_constructors.rs18
-rw-r--r--src/test/incremental/hashes/trait_defs.rs121
-rw-r--r--src/test/incremental/hashes/while_let_loops.rs18
-rw-r--r--src/test/incremental/hashes/while_loops.rs18
-rw-r--r--src/test/rustdoc/async-fn.rs2
-rw-r--r--src/test/rustdoc/async-move-doctest.rs6
-rw-r--r--src/test/rustdoc/edition-flag.rs3
-rw-r--r--src/test/ui/async-await/argument-patterns.rs1
-rw-r--r--src/test/ui/async-await/async-await.rs2
-rw-r--r--src/test/ui/async-await/async-block-control-flow-static-semantics.rs2
-rw-r--r--src/test/ui/async-await/async-block-control-flow-static-semantics.stderr16
-rw-r--r--src/test/ui/async-await/async-closure-matches-expr.rs2
-rw-r--r--src/test/ui/async-await/async-closure.rs2
-rw-r--r--src/test/ui/async-await/async-error-span.rs3
-rw-r--r--src/test/ui/async-await/async-error-span.stderr4
-rw-r--r--src/test/ui/async-await/async-fn-elided-impl-lifetime-parameter.rs2
-rw-r--r--src/test/ui/async-await/async-fn-nonsend.rs2
-rw-r--r--src/test/ui/async-await/async-fn-nonsend.stderr32
-rw-r--r--src/test/ui/async-await/async-fn-path-elision.rs3
-rw-r--r--src/test/ui/async-await/async-fn-path-elision.stderr2
-rw-r--r--src/test/ui/async-await/async-fn-send-uses-nonsend.rs2
-rw-r--r--src/test/ui/async-await/async-fn-size-moved-locals.rs2
-rw-r--r--src/test/ui/async-await/async-fn-size.rs2
-rw-r--r--src/test/ui/async-await/async-matches-expr.rs2
-rw-r--r--src/test/ui/async-await/async-unsafe-fn-call-in-safe.rs2
-rw-r--r--src/test/ui/async-await/async-unsafe-fn-call-in-safe.stderr8
-rw-r--r--src/test/ui/async-await/async-with-closure.rs2
-rw-r--r--src/test/ui/async-await/await-keyword/2015-edition-error-various-positions.rs1
-rw-r--r--src/test/ui/async-await/await-keyword/2015-edition-error-various-positions.stderr22
-rw-r--r--src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.rs1
-rw-r--r--src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.stderr14
-rw-r--r--src/test/ui/async-await/await-keyword/incorrect-syntax-suggestions.rs2
-rw-r--r--src/test/ui/async-await/await-keyword/incorrect-syntax-suggestions.stderr70
-rw-r--r--src/test/ui/async-await/await-unsize.rs2
-rw-r--r--src/test/ui/async-await/bound-normalization.rs2
-rw-r--r--src/test/ui/async-await/conditional-and-guaranteed-initialization.rs2
-rw-r--r--src/test/ui/async-await/dont-print-desugared-async.rs1
-rw-r--r--src/test/ui/async-await/dont-print-desugared-async.stderr2
-rw-r--r--src/test/ui/async-await/dont-suggest-missing-await.rs2
-rw-r--r--src/test/ui/async-await/dont-suggest-missing-await.stderr2
-rw-r--r--src/test/ui/async-await/drop-order/drop-order-for-async-fn-parameters-by-ref-binding.rs1
-rw-r--r--src/test/ui/async-await/drop-order/drop-order-for-async-fn-parameters.rs1
-rw-r--r--src/test/ui/async-await/drop-order/drop-order-for-locals-when-cancelled.rs2
-rw-r--r--src/test/ui/async-await/drop-order/drop-order-locals-are-hidden.rs3
-rw-r--r--src/test/ui/async-await/drop-order/drop-order-locals-are-hidden.stderr8
-rw-r--r--src/test/ui/async-await/drop-order/drop-order-when-cancelled.rs3
-rw-r--r--src/test/ui/async-await/edition-deny-async-fns-2015.rs2
-rw-r--r--src/test/ui/async-await/edition-deny-async-fns-2015.stderr20
-rw-r--r--src/test/ui/async-await/generics-and-bounds.rs2
-rw-r--r--src/test/ui/async-await/issue-60709.rs3
-rw-r--r--src/test/ui/async-await/issue-61452.rs1
-rw-r--r--src/test/ui/async-await/issue-61452.stderr4
-rw-r--r--src/test/ui/async-await/issue-61793.rs3
-rw-r--r--src/test/ui/async-await/issue-61949-self-return-type.rs1
-rw-r--r--src/test/ui/async-await/issue-61949-self-return-type.stderr2
-rw-r--r--src/test/ui/async-await/issue-62658.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-51719.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-51719.stderr2
-rw-r--r--src/test/ui/async-await/issues/issue-51751.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-51751.stderr2
-rw-r--r--src/test/ui/async-await/issues/issue-53249.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-54752-async-block.rs3
-rw-r--r--src/test/ui/async-await/issues/issue-54974.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-55324.rs3
-rw-r--r--src/test/ui/async-await/issues/issue-55809.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-58885.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-59001.rs3
-rw-r--r--src/test/ui/async-await/issues/issue-59972.rs6
-rw-r--r--src/test/ui/async-await/issues/issue-60518.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-60655-latebound-regions.rs1
-rw-r--r--src/test/ui/async-await/issues/issue-60674.rs1
-rw-r--r--src/test/ui/async-await/issues/issue-61187.rs4
-rw-r--r--src/test/ui/async-await/issues/issue-61187.stderr2
-rw-r--r--src/test/ui/async-await/issues/issue-61986.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-62009-1.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-62009-1.stderr12
-rw-r--r--src/test/ui/async-await/issues/issue-62009-2.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-62517-1.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-62517-2.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-63388-1.nll.stderr4
-rw-r--r--src/test/ui/async-await/issues/issue-63388-1.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-63388-1.stderr2
-rw-r--r--src/test/ui/async-await/issues/issue-63388-2.nll.stderr2
-rw-r--r--src/test/ui/async-await/issues/issue-63388-2.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-63388-2.stderr10
-rw-r--r--src/test/ui/async-await/issues/issue-63388-3.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-63388-4.rs2
-rw-r--r--src/test/ui/async-await/issues/non-async-enclosing-span.rs1
-rw-r--r--src/test/ui/async-await/issues/non-async-enclosing-span.stderr2
-rw-r--r--src/test/ui/async-await/move-part-await-return-rest-struct.rs2
-rw-r--r--src/test/ui/async-await/move-part-await-return-rest-tuple.rs2
-rw-r--r--src/test/ui/async-await/multiple-lifetimes/elided.rs2
-rw-r--r--src/test/ui/async-await/multiple-lifetimes/fn-ptr.rs2
-rw-r--r--src/test/ui/async-await/multiple-lifetimes/hrtb.rs3
-rw-r--r--src/test/ui/async-await/multiple-lifetimes/named.rs2
-rw-r--r--src/test/ui/async-await/multiple-lifetimes/partial-relation.rs2
-rw-r--r--src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-fg.rs2
-rw-r--r--src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-no-fg.rs2
-rw-r--r--src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-no-fg.stderr2
-rw-r--r--src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-one.rs2
-rw-r--r--src/test/ui/async-await/multiple-lifetimes/ret-ref.rs2
-rw-r--r--src/test/ui/async-await/multiple-lifetimes/ret-ref.stderr6
-rw-r--r--src/test/ui/async-await/multiple-lifetimes/variance.rs3
-rw-r--r--src/test/ui/async-await/nested-in-impl.rs2
-rw-r--r--src/test/ui/async-await/no-args-non-move-async-closure.rs2
-rw-r--r--src/test/ui/async-await/no-async-const.rs2
-rw-r--r--src/test/ui/async-await/no-async-const.stderr2
-rw-r--r--src/test/ui/async-await/no-const-async.rs2
-rw-r--r--src/test/ui/async-await/no-const-async.stderr4
-rw-r--r--src/test/ui/async-await/no-move-across-await-struct.rs2
-rw-r--r--src/test/ui/async-await/no-move-across-await-struct.stderr2
-rw-r--r--src/test/ui/async-await/no-move-across-await-tuple.rs2
-rw-r--r--src/test/ui/async-await/no-move-across-await-tuple.stderr2
-rw-r--r--src/test/ui/async-await/no-non-guaranteed-initialization.rs2
-rw-r--r--src/test/ui/async-await/no-non-guaranteed-initialization.stderr2
-rw-r--r--src/test/ui/async-await/partial-initialization-across-await.rs2
-rw-r--r--src/test/ui/async-await/partial-initialization-across-await.stderr6
-rw-r--r--src/test/ui/async-await/recursive-async-impl-trait-type.rs2
-rw-r--r--src/test/ui/async-await/recursive-async-impl-trait-type.stderr2
-rw-r--r--src/test/ui/async-await/suggest-missing-await-closure.fixed2
-rw-r--r--src/test/ui/async-await/suggest-missing-await-closure.rs2
-rw-r--r--src/test/ui/async-await/suggest-missing-await.fixed2
-rw-r--r--src/test/ui/async-await/suggest-missing-await.rs2
-rw-r--r--src/test/ui/async-await/suggest-missing-await.stderr2
-rw-r--r--src/test/ui/async-await/unresolved_type_param.rs2
-rw-r--r--src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.rs16
-rw-r--r--src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.stderr (renamed from src/test/ui/consts/min_const_fn/min_const_fn_unsafe.stderr)10
-rw-r--r--src/test/ui/consts/min_const_fn/min_const_fn_unsafe_ok.rs (renamed from src/test/ui/consts/min_const_fn/min_const_fn_unsafe.rs)23
-rw-r--r--src/test/ui/drop/dynamic-drop-async.rs3
-rw-r--r--src/test/ui/feature-gates/feature-gate-async-await-2015-edition.rs9
-rw-r--r--src/test/ui/feature-gates/feature-gate-async-await-2015-edition.stderr31
-rw-r--r--src/test/ui/feature-gates/feature-gate-async-await.rs18
-rw-r--r--src/test/ui/feature-gates/feature-gate-async-await.stderr45
-rw-r--r--src/test/ui/generator/issue-61442-stmt-expr-with-drop.rs2
-rw-r--r--src/test/ui/generator/issue-62506-two_awaits.rs1
-rw-r--r--src/test/ui/impl-trait/bound-normalization-fail.rs1
-rw-r--r--src/test/ui/impl-trait/bound-normalization-fail.stderr8
-rw-r--r--src/test/ui/impl-trait/bound-normalization-pass.rs1
-rw-r--r--src/test/ui/impl-trait/bound-normalization-pass.stderr2
-rw-r--r--src/test/ui/impl-trait/issue-55872-2.rs3
-rw-r--r--src/test/ui/impl-trait/issue-55872-2.stderr4
-rw-r--r--src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.rs1
-rw-r--r--src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.stderr4
-rw-r--r--src/test/ui/inference/cannot-infer-async.rs1
-rw-r--r--src/test/ui/inference/cannot-infer-async.stderr2
-rw-r--r--src/test/ui/issues/issue-31776.rs6
-rw-r--r--src/test/ui/issues/issue-50415.rs6
-rw-r--r--src/test/ui/issues/issue-5067.rs4
-rw-r--r--src/test/ui/lint/lint-unused-mut-variables.rs2
-rw-r--r--src/test/ui/lint/lint-unused-variables.rs2
-rw-r--r--src/test/ui/macros/restricted-shadowing-modern.rs2
-rw-r--r--src/test/ui/macros/restricted-shadowing-modern.stderr18
-rw-r--r--src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.migrate.nll.stderr2
-rw-r--r--src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.migrate.stderr10
-rw-r--r--src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.nll.stderr2
-rw-r--r--src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.rs4
-rw-r--r--src/test/ui/rfc-2565-param-attrs/param-attrs-cfg.rs2
-rw-r--r--src/test/ui/self/arbitrary_self_types_pin_lifetime-async.rs2
-rw-r--r--src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.nll.stderr2
-rw-r--r--src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.rs2
-rw-r--r--src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.stderr8
-rw-r--r--src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.nll.stderr10
-rw-r--r--src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.rs2
-rw-r--r--src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.stderr6
-rw-r--r--src/test/ui/self/elision/alias-async.rs2
-rw-r--r--src/test/ui/self/elision/assoc-async.rs2
-rw-r--r--src/test/ui/self/elision/lt-alias-async.rs2
-rw-r--r--src/test/ui/self/elision/lt-assoc-async.rs2
-rw-r--r--src/test/ui/self/elision/lt-ref-self-async.nll.stderr24
-rw-r--r--src/test/ui/self/elision/lt-ref-self-async.rs2
-rw-r--r--src/test/ui/self/elision/lt-ref-self-async.stderr12
-rw-r--r--src/test/ui/self/elision/lt-self-async.rs2
-rw-r--r--src/test/ui/self/elision/lt-struct-async.rs2
-rw-r--r--src/test/ui/self/elision/multiple-ref-self-async.rs2
-rw-r--r--src/test/ui/self/elision/ref-alias-async.rs2
-rw-r--r--src/test/ui/self/elision/ref-assoc-async.rs2
-rw-r--r--src/test/ui/self/elision/ref-mut-alias-async.rs1
-rw-r--r--src/test/ui/self/elision/ref-mut-self-async.nll.stderr24
-rw-r--r--src/test/ui/self/elision/ref-mut-self-async.rs2
-rw-r--r--src/test/ui/self/elision/ref-mut-self-async.stderr12
-rw-r--r--src/test/ui/self/elision/ref-mut-struct-async.nll.stderr20
-rw-r--r--src/test/ui/self/elision/ref-mut-struct-async.rs2
-rw-r--r--src/test/ui/self/elision/ref-mut-struct-async.stderr10
-rw-r--r--src/test/ui/self/elision/ref-self-async.nll.stderr28
-rw-r--r--src/test/ui/self/elision/ref-self-async.rs2
-rw-r--r--src/test/ui/self/elision/ref-self-async.stderr14
-rw-r--r--src/test/ui/self/elision/ref-struct-async.nll.stderr20
-rw-r--r--src/test/ui/self/elision/ref-struct-async.rs2
-rw-r--r--src/test/ui/self/elision/ref-struct-async.stderr10
-rw-r--r--src/test/ui/self/elision/self-async.rs2
-rw-r--r--src/test/ui/self/elision/struct-async.rs2
-rw-r--r--src/test/ui/self/self_lifetime-async.rs2
-rw-r--r--src/test/ui/suggestions/dont-suggest-ref/duplicate-suggestions.rs2
-rw-r--r--src/test/ui/suggestions/dont-suggest-ref/move-into-closure.rs4
-rw-r--r--src/test/ui/suggestions/dont-suggest-ref/simple.rs8
-rw-r--r--src/test/ui/traits/traits-conditional-model-fn.rs1
218 files changed, 801 insertions, 1139 deletions
diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs
index afde076a35a..955809e8074 100644
--- a/src/bootstrap/builder.rs
+++ b/src/bootstrap/builder.rs
@@ -618,13 +618,7 @@ impl<'a> Builder<'a> {
             }
 
             fn run(self, builder: &Builder<'_>) -> Interned<PathBuf> {
-                let compiler = self.compiler;
-                let config = &builder.build.config;
-                let lib = if compiler.stage >= 1 && config.libdir_relative().is_some() {
-                    builder.build.config.libdir_relative().unwrap()
-                } else {
-                    Path::new("lib")
-                };
+                let lib = builder.sysroot_libdir_relative(self.compiler);
                 let sysroot = builder
                     .sysroot(self.compiler)
                     .join(lib)
@@ -678,6 +672,18 @@ impl<'a> Builder<'a> {
         }
     }
 
+    /// Returns the compiler's relative libdir where the standard library and other artifacts are
+    /// found for a compiler's sysroot.
+    ///
+    /// For example this returns `lib` on Unix and Windows.
+    pub fn sysroot_libdir_relative(&self, compiler: Compiler) -> &Path {
+        match self.config.libdir_relative() {
+            Some(relative_libdir) if compiler.stage >= 1
+                => relative_libdir,
+            _ => Path::new("lib")
+        }
+    }
+
     /// Adds the compiler's directory of dynamic libraries to `cmd`'s dynamic
     /// library lookup path.
     pub fn add_rustc_lib_path(&self, compiler: Compiler, cmd: &mut Command) {
diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs
index bd012a887c2..213ceb194a8 100644
--- a/src/bootstrap/dist.rs
+++ b/src/bootstrap/dist.rs
@@ -469,7 +469,6 @@ impl Step for Rustc {
         fn prepare_image(builder: &Builder<'_>, compiler: Compiler, image: &Path) {
             let host = compiler.host;
             let src = builder.sysroot(compiler);
-            let libdir = builder.rustc_libdir(compiler);
 
             // Copy rustc/rustdoc binaries
             t!(fs::create_dir_all(image.join("bin")));
@@ -481,11 +480,14 @@ impl Step for Rustc {
 
             // Copy runtime DLLs needed by the compiler
             if libdir_relative.to_str() != Some("bin") {
+                let libdir = builder.rustc_libdir(compiler);
                 for entry in builder.read_dir(&libdir) {
                     let name = entry.file_name();
                     if let Some(s) = name.to_str() {
                         if is_dylib(s) {
-                            builder.install(&entry.path(), &image.join(&libdir_relative), 0o644);
+                            // Don't use custom libdir here because ^lib/ will be resolved again
+                            // with installer
+                            builder.install(&entry.path(), &image.join("lib"), 0o644);
                         }
                     }
                 }
@@ -493,8 +495,11 @@ impl Step for Rustc {
 
             // Copy over the codegen backends
             let backends_src = builder.sysroot_codegen_backends(compiler);
-            let backends_rel = backends_src.strip_prefix(&src).unwrap();
-            let backends_dst = image.join(&backends_rel);
+            let backends_rel = backends_src.strip_prefix(&src).unwrap()
+                .strip_prefix(builder.sysroot_libdir_relative(compiler)).unwrap();
+            // Don't use custom libdir here because ^lib/ will be resolved again with installer
+            let backends_dst = image.join("lib").join(&backends_rel);
+
             t!(fs::create_dir_all(&backends_dst));
             builder.cp_r(&backends_src, &backends_dst);
 
diff --git a/src/librustc/error_codes.rs b/src/librustc/error_codes.rs
index b3eee7c3464..a200a058f4f 100644
--- a/src/librustc/error_codes.rs
+++ b/src/librustc/error_codes.rs
@@ -2088,7 +2088,6 @@ generator can be constructed.
 Erroneous code example:
 
 ```edition2018,compile-fail,E0698
-#![feature(async_await)]
 async fn bar<T>() -> () {}
 
 async fn foo() {
@@ -2101,7 +2100,6 @@ To fix this you must bind `T` to a concrete type such as `String`
 so that a generator can then be constructed:
 
 ```edition2018
-#![feature(async_await)]
 async fn bar<T>() -> () {}
 
 async fn foo() {
diff --git a/src/librustc_metadata/cstore.rs b/src/librustc_metadata/cstore.rs
index 792922a1837..efc77699313 100644
--- a/src/librustc_metadata/cstore.rs
+++ b/src/librustc_metadata/cstore.rs
@@ -68,9 +68,9 @@ pub struct CrateMetadata {
     pub alloc_decoding_state: AllocDecodingState,
 
     // NOTE(eddyb) we pass `'static` to a `'tcx` parameter because this
-    // lifetime is only used behind `Lazy` / `LazySeq`, and therefore
-    // acts like an universal (`for<'tcx>`), that is paired up with
-    // whichever `TyCtxt` is being used to decode those values.
+    // lifetime is only used behind `Lazy`, and therefore acts like an
+    // universal (`for<'tcx>`), that is paired up with whichever `TyCtxt`
+    // is being used to decode those values.
     pub root: schema::CrateRoot<'static>,
 
     /// For each definition in this crate, we encode a key. When the
@@ -80,7 +80,7 @@ pub struct CrateMetadata {
     /// compilation support.
     pub def_path_table: Lrc<DefPathTable>,
 
-    pub trait_impls: FxHashMap<(u32, DefIndex), schema::LazySeq<DefIndex>>,
+    pub trait_impls: FxHashMap<(u32, DefIndex), schema::Lazy<[DefIndex]>>,
 
     pub dep_kind: Lock<DepKind>,
     pub source: CrateSource,
diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs
index d29592a5d68..da96728d2de 100644
--- a/src/librustc_metadata/decoder.rs
+++ b/src/librustc_metadata/decoder.rs
@@ -134,14 +134,14 @@ impl<'a, 'tcx, T: Decodable> Lazy<T> {
     }
 }
 
-impl<'a: 'x, 'tcx: 'x, 'x, T: Decodable> LazySeq<T> {
+impl<'a: 'x, 'tcx: 'x, 'x, T: Decodable> Lazy<[T]> {
     pub fn decode<M: Metadata<'a, 'tcx>>(
         self,
         meta: M,
     ) -> impl ExactSizeIterator<Item = T> + Captures<'a> + Captures<'tcx> + 'x {
         let mut dcx = meta.decoder(self.position);
         dcx.lazy_state = LazyState::NodeStart(self.position);
-        (0..self.len).map(move |_| T::decode(&mut dcx).unwrap())
+        (0..self.meta).map(move |_| T::decode(&mut dcx).unwrap())
     }
 }
 
@@ -154,10 +154,14 @@ impl<'a, 'tcx> DecodeContext<'a, 'tcx> {
         self.cdata.expect("missing CrateMetadata in DecodeContext")
     }
 
-    fn read_lazy_distance(&mut self, min_size: usize) -> Result<usize, <Self as Decoder>::Error> {
+    fn read_lazy_with_meta<T: ?Sized + LazyMeta>(
+        &mut self,
+        meta: T::Meta,
+    ) -> Result<Lazy<T>, <Self as Decoder>::Error> {
+        let min_size = T::min_size(meta);
         let distance = self.read_usize()?;
         let position = match self.lazy_state {
-            LazyState::NoNode => bug!("read_lazy_distance: outside of a metadata node"),
+            LazyState::NoNode => bug!("read_lazy_with_meta: outside of a metadata node"),
             LazyState::NodeStart(start) => {
                 assert!(distance + min_size <= start);
                 start - distance - min_size
@@ -165,7 +169,7 @@ impl<'a, 'tcx> DecodeContext<'a, 'tcx> {
             LazyState::Previous(last_min_end) => last_min_end + distance,
         };
         self.lazy_state = LazyState::Previous(position + min_size);
-        Ok(position)
+        Ok(Lazy::from_position_and_meta(position, meta))
     }
 }
 
@@ -230,19 +234,18 @@ impl<'a, 'tcx> TyDecoder<'tcx> for DecodeContext<'a, 'tcx> {
 
 impl<'a, 'tcx, T> SpecializedDecoder<Lazy<T>> for DecodeContext<'a, 'tcx> {
     fn specialized_decode(&mut self) -> Result<Lazy<T>, Self::Error> {
-        Ok(Lazy::with_position(self.read_lazy_distance(Lazy::<T>::min_size())?))
+        self.read_lazy_with_meta(())
     }
 }
 
-impl<'a, 'tcx, T> SpecializedDecoder<LazySeq<T>> for DecodeContext<'a, 'tcx> {
-    fn specialized_decode(&mut self) -> Result<LazySeq<T>, Self::Error> {
+impl<'a, 'tcx, T> SpecializedDecoder<Lazy<[T]>> for DecodeContext<'a, 'tcx> {
+    fn specialized_decode(&mut self) -> Result<Lazy<[T]>, Self::Error> {
         let len = self.read_usize()?;
-        let position = if len == 0 {
-            0
+        if len == 0 {
+            Ok(Lazy::empty())
         } else {
-            self.read_lazy_distance(LazySeq::<T>::min_size(len))?
-        };
-        Ok(LazySeq::with_position_and_length(position, len))
+            self.read_lazy_with_meta(len)
+        }
     }
 }
 
@@ -378,7 +381,7 @@ impl<'tcx> MetadataBlob {
     }
 
     pub fn get_rustc_version(&self) -> String {
-        Lazy::with_position(METADATA_HEADER.len() + 4).decode(self)
+        Lazy::<String>::from_position(METADATA_HEADER.len() + 4).decode(self)
     }
 
     pub fn get_root(&self) -> CrateRoot<'tcx> {
@@ -387,7 +390,7 @@ impl<'tcx> MetadataBlob {
         let pos = (((slice[offset + 0] as u32) << 24) | ((slice[offset + 1] as u32) << 16) |
                    ((slice[offset + 2] as u32) << 8) |
                    ((slice[offset + 3] as u32) << 0)) as usize;
-        Lazy::with_position(pos).decode(self)
+        Lazy::<CrateRoot<'tcx>>::from_position(pos).decode(self)
     }
 
     pub fn list_crate_metadata(&self,
@@ -1140,7 +1143,7 @@ impl<'a, 'tcx> CrateMetadata {
             EntryKind::Fn(data) |
             EntryKind::ForeignFn(data) => data.decode(self).arg_names,
             EntryKind::Method(data) => data.decode(self).fn_data.arg_names,
-            _ => LazySeq::empty(),
+            _ => Lazy::empty(),
         };
         arg_names.decode(self).collect()
     }
diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs
index 6058ae99cf4..df3320c64a9 100644
--- a/src/librustc_metadata/encoder.rs
+++ b/src/librustc_metadata/encoder.rs
@@ -98,17 +98,17 @@ impl<'tcx> Encoder for EncodeContext<'tcx> {
 
 impl<'tcx, T> SpecializedEncoder<Lazy<T>> for EncodeContext<'tcx> {
     fn specialized_encode(&mut self, lazy: &Lazy<T>) -> Result<(), Self::Error> {
-        self.emit_lazy_distance(lazy.position, Lazy::<T>::min_size())
+        self.emit_lazy_distance(*lazy)
     }
 }
 
-impl<'tcx, T> SpecializedEncoder<LazySeq<T>> for EncodeContext<'tcx> {
-    fn specialized_encode(&mut self, seq: &LazySeq<T>) -> Result<(), Self::Error> {
-        self.emit_usize(seq.len)?;
-        if seq.len == 0 {
+impl<'tcx, T> SpecializedEncoder<Lazy<[T]>> for EncodeContext<'tcx> {
+    fn specialized_encode(&mut self, lazy: &Lazy<[T]>) -> Result<(), Self::Error> {
+        self.emit_usize(lazy.meta)?;
+        if lazy.meta == 0 {
             return Ok(());
         }
-        self.emit_lazy_distance(seq.position, LazySeq::<T>::min_size(seq.len))
+        self.emit_lazy_distance(*lazy)
     }
 }
 
@@ -239,21 +239,38 @@ impl<'tcx> TyEncoder for EncodeContext<'tcx> {
     }
 }
 
-impl<'tcx> EncodeContext<'tcx> {
-    fn emit_node<F: FnOnce(&mut Self, usize) -> R, R>(&mut self, f: F) -> R {
-        assert_eq!(self.lazy_state, LazyState::NoNode);
-        let pos = self.position();
-        self.lazy_state = LazyState::NodeStart(pos);
-        let r = f(self, pos);
-        self.lazy_state = LazyState::NoNode;
-        r
+/// Helper trait to allow overloading `EncodeContext::lazy` for iterators.
+trait EncodeContentsForLazy<T: ?Sized + LazyMeta> {
+    fn encode_contents_for_lazy(self, ecx: &mut EncodeContext<'tcx>) -> T::Meta;
+}
+
+impl<T: Encodable> EncodeContentsForLazy<T> for &T {
+    fn encode_contents_for_lazy(self, ecx: &mut EncodeContext<'tcx>) {
+        self.encode(ecx).unwrap()
+    }
+}
+
+impl<T: Encodable> EncodeContentsForLazy<T> for T {
+    fn encode_contents_for_lazy(self, ecx: &mut EncodeContext<'tcx>) {
+        self.encode(ecx).unwrap()
+    }
+}
+
+impl<I, T> EncodeContentsForLazy<[T]> for I
+    where I: IntoIterator,
+          I::Item: EncodeContentsForLazy<T>,
+{
+    fn encode_contents_for_lazy(self, ecx: &mut EncodeContext<'tcx>) -> usize {
+        self.into_iter().map(|value| value.encode_contents_for_lazy(ecx)).count()
     }
+}
 
-    fn emit_lazy_distance(&mut self,
-                          position: usize,
-                          min_size: usize)
-                          -> Result<(), <Self as Encoder>::Error> {
-        let min_end = position + min_size;
+impl<'tcx> EncodeContext<'tcx> {
+    fn emit_lazy_distance<T: ?Sized + LazyMeta>(
+        &mut self,
+        lazy: Lazy<T>,
+    ) -> Result<(), <Self as Encoder>::Error> {
+        let min_end = lazy.position + T::min_size(lazy.meta);
         let distance = match self.lazy_state {
             LazyState::NoNode => bug!("emit_lazy_distance: outside of a metadata node"),
             LazyState::NodeStart(start) => {
@@ -262,48 +279,31 @@ impl<'tcx> EncodeContext<'tcx> {
             }
             LazyState::Previous(last_min_end) => {
                 assert!(
-                    last_min_end <= position,
+                    last_min_end <= lazy.position,
                     "make sure that the calls to `lazy*` \
                     are in the same order as the metadata fields",
                 );
-                position - last_min_end
+                lazy.position - last_min_end
             }
         };
         self.lazy_state = LazyState::Previous(min_end);
         self.emit_usize(distance)
     }
 
-    pub fn lazy<T: Encodable>(&mut self, value: &T) -> Lazy<T> {
-        self.emit_node(|ecx, pos| {
-            value.encode(ecx).unwrap();
-
-            assert!(pos + Lazy::<T>::min_size() <= ecx.position());
-            Lazy::with_position(pos)
-        })
-    }
-
-    pub fn lazy_seq<I, T>(&mut self, iter: I) -> LazySeq<T>
-        where I: IntoIterator<Item = T>,
-              T: Encodable
-    {
-        self.emit_node(|ecx, pos| {
-            let len = iter.into_iter().map(|value| value.encode(ecx).unwrap()).count();
+    fn lazy<T: ?Sized + LazyMeta>(
+        &mut self,
+        value: impl EncodeContentsForLazy<T>,
+    ) -> Lazy<T> {
+        let pos = self.position();
 
-            assert!(pos + LazySeq::<T>::min_size(len) <= ecx.position());
-            LazySeq::with_position_and_length(pos, len)
-        })
-    }
+        assert_eq!(self.lazy_state, LazyState::NoNode);
+        self.lazy_state = LazyState::NodeStart(pos);
+        let meta = value.encode_contents_for_lazy(self);
+        self.lazy_state = LazyState::NoNode;
 
-    pub fn lazy_seq_ref<'b, I, T>(&mut self, iter: I) -> LazySeq<T>
-        where I: IntoIterator<Item = &'b T>,
-              T: 'b + Encodable
-    {
-        self.emit_node(|ecx, pos| {
-            let len = iter.into_iter().map(|value| value.encode(ecx).unwrap()).count();
+        assert!(pos + <T>::min_size(meta) <= self.position());
 
-            assert!(pos + LazySeq::<T>::min_size(len) <= ecx.position());
-            LazySeq::with_position_and_length(pos, len)
-        })
+        Lazy::from_position_and_meta(pos, meta)
     }
 
     /// Emit the data for a `DefId` to the metadata. The function to
@@ -320,7 +320,7 @@ impl<'tcx> EncodeContext<'tcx> {
         assert!(id.is_local());
 
         let entry = op(self, data);
-        let entry = self.lazy(&entry);
+        let entry = self.lazy(entry);
         self.entries_index.record(id, entry);
     }
 
@@ -341,7 +341,7 @@ impl<'tcx> EncodeContext<'tcx> {
         self.lazy(definitions.def_path_table())
     }
 
-    fn encode_source_map(&mut self) -> LazySeq<syntax_pos::SourceFile> {
+    fn encode_source_map(&mut self) -> Lazy<[syntax_pos::SourceFile]> {
         let source_map = self.tcx.sess.source_map();
         let all_source_files = source_map.files();
 
@@ -380,7 +380,7 @@ impl<'tcx> EncodeContext<'tcx> {
             })
             .collect::<Vec<_>>();
 
-        self.lazy_seq_ref(adapted.iter().map(|rc| &**rc))
+        self.lazy(adapted.iter().map(|rc| &**rc))
     }
 
     fn encode_crate_root(&mut self) -> Lazy<CrateRoot<'tcx>> {
@@ -463,7 +463,7 @@ impl<'tcx> EncodeContext<'tcx> {
                 }
                 n = new_n;
             }
-            self.lazy_seq(interpret_alloc_index)
+            self.lazy(interpret_alloc_index)
         };
 
 
@@ -482,8 +482,7 @@ impl<'tcx> EncodeContext<'tcx> {
         let has_global_allocator = *tcx.sess.has_global_allocator.get();
         let has_panic_handler = *tcx.sess.has_panic_handler.try_get().unwrap_or(&false);
 
-
-        let root = self.lazy(&CrateRoot {
+        let root = self.lazy(CrateRoot {
             name: tcx.crate_name(LOCAL_CRATE),
             extra_filename: tcx.sess.opts.cg.extra_filename.clone(),
             triple: tcx.sess.opts.target_triple.clone(),
@@ -562,17 +561,17 @@ impl<'tcx> EncodeContext<'tcx> {
 }
 
 impl EncodeContext<'tcx> {
-    fn encode_variances_of(&mut self, def_id: DefId) -> LazySeq<ty::Variance> {
+    fn encode_variances_of(&mut self, def_id: DefId) -> Lazy<[ty::Variance]> {
         debug!("EncodeContext::encode_variances_of({:?})", def_id);
         let tcx = self.tcx;
-        self.lazy_seq_ref(&tcx.variances_of(def_id)[..])
+        self.lazy(&tcx.variances_of(def_id)[..])
     }
 
     fn encode_item_type(&mut self, def_id: DefId) -> Lazy<Ty<'tcx>> {
         let tcx = self.tcx;
         let ty = tcx.type_of(def_id);
         debug!("EncodeContext::encode_item_type({:?}) => {:?}", def_id, ty);
-        self.lazy(&ty)
+        self.lazy(ty)
     }
 
     fn encode_enum_variant_info(
@@ -601,11 +600,11 @@ impl EncodeContext<'tcx> {
         let enum_vis = &tcx.hir().expect_item(enum_id).vis;
 
         Entry {
-            kind: EntryKind::Variant(self.lazy(&data)),
-            visibility: self.lazy(&ty::Visibility::from_hir(enum_vis, enum_id, tcx)),
-            span: self.lazy(&tcx.def_span(def_id)),
+            kind: EntryKind::Variant(self.lazy(data)),
+            visibility: self.lazy(ty::Visibility::from_hir(enum_vis, enum_id, tcx)),
+            span: self.lazy(tcx.def_span(def_id)),
             attributes: self.encode_attributes(&tcx.get_attrs(def_id)),
-            children: self.lazy_seq(variant.fields.iter().map(|f| {
+            children: self.lazy(variant.fields.iter().map(|f| {
                 assert!(f.did.is_local());
                 f.did.index
             })),
@@ -613,11 +612,11 @@ impl EncodeContext<'tcx> {
             deprecation: self.encode_deprecation(def_id),
 
             ty: Some(self.encode_item_type(def_id)),
-            inherent_impls: LazySeq::empty(),
+            inherent_impls: Lazy::empty(),
             variances: if variant.ctor_kind == CtorKind::Fn {
                 self.encode_variances_of(def_id)
             } else {
-                LazySeq::empty()
+                Lazy::empty()
             },
             generics: Some(self.encode_generics(def_id)),
             predicates: Some(self.encode_predicates(def_id)),
@@ -642,7 +641,7 @@ impl EncodeContext<'tcx> {
             discr: variant.discr,
             ctor: Some(def_id.index),
             ctor_sig: if variant.ctor_kind == CtorKind::Fn {
-                Some(self.lazy(&tcx.fn_sig(def_id)))
+                Some(self.lazy(tcx.fn_sig(def_id)))
             } else {
                 None
             }
@@ -658,20 +657,20 @@ impl EncodeContext<'tcx> {
         }
 
         Entry {
-            kind: EntryKind::Variant(self.lazy(&data)),
-            visibility: self.lazy(&ctor_vis),
-            span: self.lazy(&tcx.def_span(def_id)),
-            attributes: LazySeq::empty(),
-            children: LazySeq::empty(),
+            kind: EntryKind::Variant(self.lazy(data)),
+            visibility: self.lazy(ctor_vis),
+            span: self.lazy(tcx.def_span(def_id)),
+            attributes: Lazy::empty(),
+            children: Lazy::empty(),
             stability: self.encode_stability(def_id),
             deprecation: self.encode_deprecation(def_id),
 
             ty: Some(self.encode_item_type(def_id)),
-            inherent_impls: LazySeq::empty(),
+            inherent_impls: Lazy::empty(),
             variances: if variant.ctor_kind == CtorKind::Fn {
                 self.encode_variances_of(def_id)
             } else {
-                LazySeq::empty()
+                Lazy::empty()
             },
             generics: Some(self.encode_generics(def_id)),
             predicates: Some(self.encode_predicates(def_id)),
@@ -691,25 +690,25 @@ impl EncodeContext<'tcx> {
 
         let data = ModData {
             reexports: match tcx.module_exports(def_id) {
-                Some(exports) => self.lazy_seq_ref(exports),
-                _ => LazySeq::empty(),
+                Some(exports) => self.lazy(exports),
+                _ => Lazy::empty(),
             },
         };
 
         Entry {
-            kind: EntryKind::Mod(self.lazy(&data)),
-            visibility: self.lazy(&ty::Visibility::from_hir(vis, id, tcx)),
-            span: self.lazy(&tcx.def_span(def_id)),
+            kind: EntryKind::Mod(self.lazy(data)),
+            visibility: self.lazy(ty::Visibility::from_hir(vis, id, tcx)),
+            span: self.lazy(tcx.def_span(def_id)),
             attributes: self.encode_attributes(attrs),
-            children: self.lazy_seq(md.item_ids.iter().map(|item_id| {
+            children: self.lazy(md.item_ids.iter().map(|item_id| {
                 tcx.hir().local_def_id(item_id.id).index
             })),
             stability: self.encode_stability(def_id),
             deprecation: self.encode_deprecation(def_id),
 
             ty: None,
-            inherent_impls: LazySeq::empty(),
-            variances: LazySeq::empty(),
+            inherent_impls: Lazy::empty(),
+            variances: Lazy::empty(),
             generics: None,
             predicates: None,
             predicates_defined_on: None,
@@ -734,16 +733,16 @@ impl EncodeContext<'tcx> {
 
         Entry {
             kind: EntryKind::Field,
-            visibility: self.lazy(&field.vis),
-            span: self.lazy(&tcx.def_span(def_id)),
+            visibility: self.lazy(field.vis),
+            span: self.lazy(tcx.def_span(def_id)),
             attributes: self.encode_attributes(&variant_data.fields()[field_index].attrs),
-            children: LazySeq::empty(),
+            children: Lazy::empty(),
             stability: self.encode_stability(def_id),
             deprecation: self.encode_deprecation(def_id),
 
             ty: Some(self.encode_item_type(def_id)),
-            inherent_impls: LazySeq::empty(),
-            variances: LazySeq::empty(),
+            inherent_impls: Lazy::empty(),
+            variances: Lazy::empty(),
             generics: Some(self.encode_generics(def_id)),
             predicates: Some(self.encode_predicates(def_id)),
             predicates_defined_on: None,
@@ -763,7 +762,7 @@ impl EncodeContext<'tcx> {
             discr: variant.discr,
             ctor: Some(def_id.index),
             ctor_sig: if variant.ctor_kind == CtorKind::Fn {
-                Some(self.lazy(&tcx.fn_sig(def_id)))
+                Some(self.lazy(tcx.fn_sig(def_id)))
             } else {
                 None
             }
@@ -789,20 +788,20 @@ impl EncodeContext<'tcx> {
         let repr_options = get_repr_options(tcx, adt_def_id);
 
         Entry {
-            kind: EntryKind::Struct(self.lazy(&data), repr_options),
-            visibility: self.lazy(&ctor_vis),
-            span: self.lazy(&tcx.def_span(def_id)),
-            attributes: LazySeq::empty(),
-            children: LazySeq::empty(),
+            kind: EntryKind::Struct(self.lazy(data), repr_options),
+            visibility: self.lazy(ctor_vis),
+            span: self.lazy(tcx.def_span(def_id)),
+            attributes: Lazy::empty(),
+            children: Lazy::empty(),
             stability: self.encode_stability(def_id),
             deprecation: self.encode_deprecation(def_id),
 
             ty: Some(self.encode_item_type(def_id)),
-            inherent_impls: LazySeq::empty(),
+            inherent_impls: Lazy::empty(),
             variances: if variant.ctor_kind == CtorKind::Fn {
                 self.encode_variances_of(def_id)
             } else {
-                LazySeq::empty()
+                Lazy::empty()
             },
             generics: Some(self.encode_generics(def_id)),
             predicates: Some(self.encode_predicates(def_id)),
@@ -821,13 +820,13 @@ impl EncodeContext<'tcx> {
     fn encode_predicates(&mut self, def_id: DefId) -> Lazy<ty::GenericPredicates<'tcx>> {
         debug!("EncodeContext::encode_predicates({:?})", def_id);
         let tcx = self.tcx;
-        self.lazy(&tcx.predicates_of(def_id))
+        self.lazy(&*tcx.predicates_of(def_id))
     }
 
     fn encode_predicates_defined_on(&mut self, def_id: DefId) -> Lazy<ty::GenericPredicates<'tcx>> {
         debug!("EncodeContext::encode_predicates_defined_on({:?})", def_id);
         let tcx = self.tcx;
-        self.lazy(&tcx.predicates_defined_on(def_id))
+        self.lazy(&*tcx.predicates_defined_on(def_id))
     }
 
     fn encode_info_for_trait_item(&mut self, def_id: DefId) -> Entry<'tcx> {
@@ -858,7 +857,7 @@ impl EncodeContext<'tcx> {
 
                 let rendered =
                     hir::print::to_string(self.tcx.hir(), |s| s.print_trait_item(ast_item));
-                let rendered_const = self.lazy(&RenderedConst(rendered));
+                let rendered_const = self.lazy(RenderedConst(rendered));
 
                 EntryKind::AssocConst(container, const_qualif, rendered_const)
             }
@@ -875,12 +874,12 @@ impl EncodeContext<'tcx> {
                     FnData {
                         constness: hir::Constness::NotConst,
                         arg_names,
-                        sig: self.lazy(&tcx.fn_sig(def_id)),
+                        sig: self.lazy(tcx.fn_sig(def_id)),
                     }
                 } else {
                     bug!()
                 };
-                EntryKind::Method(self.lazy(&MethodData {
+                EntryKind::Method(self.lazy(MethodData {
                     fn_data,
                     container,
                     has_self: trait_item.method_has_self_argument,
@@ -892,10 +891,10 @@ impl EncodeContext<'tcx> {
 
         Entry {
             kind,
-            visibility: self.lazy(&trait_item.vis),
-            span: self.lazy(&ast_item.span),
+            visibility: self.lazy(trait_item.vis),
+            span: self.lazy(ast_item.span),
             attributes: self.encode_attributes(&ast_item.attrs),
-            children: LazySeq::empty(),
+            children: Lazy::empty(),
             stability: self.encode_stability(def_id),
             deprecation: self.encode_deprecation(def_id),
 
@@ -913,11 +912,11 @@ impl EncodeContext<'tcx> {
                 }
                 ty::AssocKind::OpaqueTy => unreachable!(),
             },
-            inherent_impls: LazySeq::empty(),
+            inherent_impls: Lazy::empty(),
             variances: if trait_item.kind == ty::AssocKind::Method {
                 self.encode_variances_of(def_id)
             } else {
-                LazySeq::empty()
+                Lazy::empty()
             },
             generics: Some(self.encode_generics(def_id)),
             predicates: Some(self.encode_predicates(def_id)),
@@ -971,12 +970,12 @@ impl EncodeContext<'tcx> {
                     FnData {
                         constness: sig.header.constness,
                         arg_names: self.encode_fn_arg_names_for_body(body),
-                        sig: self.lazy(&tcx.fn_sig(def_id)),
+                        sig: self.lazy(tcx.fn_sig(def_id)),
                     }
                 } else {
                     bug!()
                 };
-                EntryKind::Method(self.lazy(&MethodData {
+                EntryKind::Method(self.lazy(MethodData {
                     fn_data,
                     container,
                     has_self: impl_item.method_has_self_argument,
@@ -1004,19 +1003,19 @@ impl EncodeContext<'tcx> {
 
         Entry {
             kind,
-            visibility: self.lazy(&impl_item.vis),
-            span: self.lazy(&ast_item.span),
+            visibility: self.lazy(impl_item.vis),
+            span: self.lazy(ast_item.span),
             attributes: self.encode_attributes(&ast_item.attrs),
-            children: LazySeq::empty(),
+            children: Lazy::empty(),
             stability: self.encode_stability(def_id),
             deprecation: self.encode_deprecation(def_id),
 
             ty: Some(self.encode_item_type(def_id)),
-            inherent_impls: LazySeq::empty(),
+            inherent_impls: Lazy::empty(),
             variances: if impl_item.kind == ty::AssocKind::Method {
                 self.encode_variances_of(def_id)
             } else {
-                LazySeq::empty()
+                Lazy::empty()
             },
             generics: Some(self.encode_generics(def_id)),
             predicates: Some(self.encode_predicates(def_id)),
@@ -1027,10 +1026,10 @@ impl EncodeContext<'tcx> {
     }
 
     fn encode_fn_arg_names_for_body(&mut self, body_id: hir::BodyId)
-                                    -> LazySeq<ast::Name> {
+                                    -> Lazy<[ast::Name]> {
         self.tcx.dep_graph.with_ignore(|| {
             let body = self.tcx.hir().body(body_id);
-            self.lazy_seq(body.arguments.iter().map(|arg| {
+            self.lazy(body.arguments.iter().map(|arg| {
                 match arg.pat.node {
                     PatKind::Binding(_, _, ident, _) => ident.name,
                     _ => kw::Invalid,
@@ -1039,28 +1038,28 @@ impl EncodeContext<'tcx> {
         })
     }
 
-    fn encode_fn_arg_names(&mut self, param_names: &[ast::Ident]) -> LazySeq<ast::Name> {
-        self.lazy_seq(param_names.iter().map(|ident| ident.name))
+    fn encode_fn_arg_names(&mut self, param_names: &[ast::Ident]) -> Lazy<[ast::Name]> {
+        self.lazy(param_names.iter().map(|ident| ident.name))
     }
 
     fn encode_optimized_mir(&mut self, def_id: DefId) -> Option<Lazy<mir::Body<'tcx>>> {
         debug!("EntryBuilder::encode_mir({:?})", def_id);
         if self.tcx.mir_keys(LOCAL_CRATE).contains(&def_id) {
             let mir = self.tcx.optimized_mir(def_id);
-            Some(self.lazy(&mir))
+            Some(self.lazy(mir))
         } else {
             None
         }
     }
 
     // Encodes the inherent implementations of a structure, enumeration, or trait.
-    fn encode_inherent_implementations(&mut self, def_id: DefId) -> LazySeq<DefIndex> {
+    fn encode_inherent_implementations(&mut self, def_id: DefId) -> Lazy<[DefIndex]> {
         debug!("EncodeContext::encode_inherent_implementations({:?})", def_id);
         let implementations = self.tcx.inherent_impls(def_id);
         if implementations.is_empty() {
-            LazySeq::empty()
+            Lazy::empty()
         } else {
-            self.lazy_seq(implementations.iter().map(|&def_id| {
+            self.lazy(implementations.iter().map(|&def_id| {
                 assert!(def_id.is_local());
                 def_id.index
             }))
@@ -1074,7 +1073,7 @@ impl EncodeContext<'tcx> {
 
     fn encode_deprecation(&mut self, def_id: DefId) -> Option<Lazy<attr::Deprecation>> {
         debug!("EncodeContext::encode_deprecation({:?})", def_id);
-        self.tcx.lookup_deprecation(def_id).map(|depr| self.lazy(&depr))
+        self.tcx.lookup_deprecation(def_id).map(|depr| self.lazy(depr))
     }
 
     fn encode_rendered_const_for_body(&mut self, body_id: hir::BodyId) -> Lazy<RenderedConst> {
@@ -1103,10 +1102,10 @@ impl EncodeContext<'tcx> {
                 let data = FnData {
                     constness: header.constness,
                     arg_names: self.encode_fn_arg_names_for_body(body),
-                    sig: self.lazy(&tcx.fn_sig(def_id)),
+                    sig: self.lazy(tcx.fn_sig(def_id)),
                 };
 
-                EntryKind::Fn(self.lazy(&data))
+                EntryKind::Fn(self.lazy(data))
             }
             hir::ItemKind::Mod(ref m) => {
                 return self.encode_info_for_mod((item.hir_id, m, &item.attrs, &item.vis));
@@ -1127,7 +1126,7 @@ impl EncodeContext<'tcx> {
 
                 let repr_options = get_repr_options(tcx, def_id);
 
-                EntryKind::Struct(self.lazy(&VariantData {
+                EntryKind::Struct(self.lazy(VariantData {
                     ctor_kind: variant.ctor_kind,
                     discr: variant.discr,
                     ctor,
@@ -1138,7 +1137,7 @@ impl EncodeContext<'tcx> {
                 let variant = tcx.adt_def(def_id).non_enum_variant();
                 let repr_options = get_repr_options(tcx, def_id);
 
-                EntryKind::Union(self.lazy(&VariantData {
+                EntryKind::Union(self.lazy(VariantData {
                     ctor_kind: variant.ctor_kind,
                     discr: variant.discr,
                     ctor: None,
@@ -1175,10 +1174,10 @@ impl EncodeContext<'tcx> {
                     defaultness,
                     parent_impl: parent,
                     coerce_unsized_info,
-                    trait_ref: trait_ref.map(|trait_ref| self.lazy(&trait_ref)),
+                    trait_ref: trait_ref.map(|trait_ref| self.lazy(trait_ref)),
                 };
 
-                EntryKind::Impl(self.lazy(&data))
+                EntryKind::Impl(self.lazy(data))
             }
             hir::ItemKind::Trait(..) => {
                 let trait_def = tcx.trait_def(def_id);
@@ -1187,17 +1186,17 @@ impl EncodeContext<'tcx> {
                     paren_sugar: trait_def.paren_sugar,
                     has_auto_impl: tcx.trait_is_auto(def_id),
                     is_marker: trait_def.is_marker,
-                    super_predicates: self.lazy(&tcx.super_predicates_of(def_id)),
+                    super_predicates: self.lazy(&*tcx.super_predicates_of(def_id)),
                 };
 
-                EntryKind::Trait(self.lazy(&data))
+                EntryKind::Trait(self.lazy(data))
             }
             hir::ItemKind::TraitAlias(..) => {
                 let data = TraitAliasData {
-                    super_predicates: self.lazy(&tcx.super_predicates_of(def_id)),
+                    super_predicates: self.lazy(&*tcx.super_predicates_of(def_id)),
                 };
 
-                EntryKind::TraitAlias(self.lazy(&data))
+                EntryKind::TraitAlias(self.lazy(data))
             }
             hir::ItemKind::ExternCrate(_) |
             hir::ItemKind::Use(..) => bug!("cannot encode info for item {:?}", item),
@@ -1205,19 +1204,19 @@ impl EncodeContext<'tcx> {
 
         Entry {
             kind,
-            visibility: self.lazy(&ty::Visibility::from_hir(&item.vis, item.hir_id, tcx)),
-            span: self.lazy(&item.span),
+            visibility: self.lazy(ty::Visibility::from_hir(&item.vis, item.hir_id, tcx)),
+            span: self.lazy(item.span),
             attributes: self.encode_attributes(&item.attrs),
             children: match item.node {
                 hir::ItemKind::ForeignMod(ref fm) => {
-                    self.lazy_seq(fm.items
+                    self.lazy(fm.items
                         .iter()
                         .map(|foreign_item| tcx.hir().local_def_id(
                             foreign_item.hir_id).index))
                 }
                 hir::ItemKind::Enum(..) => {
                     let def = self.tcx.adt_def(def_id);
-                    self.lazy_seq(def.variants.iter().map(|v| {
+                    self.lazy(def.variants.iter().map(|v| {
                         assert!(v.def_id.is_local());
                         v.def_id.index
                     }))
@@ -1225,19 +1224,19 @@ impl EncodeContext<'tcx> {
                 hir::ItemKind::Struct(..) |
                 hir::ItemKind::Union(..) => {
                     let def = self.tcx.adt_def(def_id);
-                    self.lazy_seq(def.non_enum_variant().fields.iter().map(|f| {
+                    self.lazy(def.non_enum_variant().fields.iter().map(|f| {
                         assert!(f.did.is_local());
                         f.did.index
                     }))
                 }
                 hir::ItemKind::Impl(..) |
                 hir::ItemKind::Trait(..) => {
-                    self.lazy_seq(tcx.associated_item_def_ids(def_id).iter().map(|&def_id| {
+                    self.lazy(tcx.associated_item_def_ids(def_id).iter().map(|&def_id| {
                         assert!(def_id.is_local());
                         def_id.index
                     }))
                 }
-                _ => LazySeq::empty(),
+                _ => Lazy::empty(),
             },
             stability: self.encode_stability(def_id),
             deprecation: self.encode_deprecation(def_id),
@@ -1260,7 +1259,7 @@ impl EncodeContext<'tcx> {
                 hir::ItemKind::Struct(..) |
                 hir::ItemKind::Union(..) |
                 hir::ItemKind::Fn(..) => self.encode_variances_of(def_id),
-                _ => LazySeq::empty(),
+                _ => Lazy::empty(),
             },
             generics: match item.node {
                 hir::ItemKind::Static(..) |
@@ -1333,20 +1332,20 @@ impl EncodeContext<'tcx> {
         use syntax::print::pprust;
         let def_id = self.tcx.hir().local_def_id(macro_def.hir_id);
         Entry {
-            kind: EntryKind::MacroDef(self.lazy(&MacroDef {
+            kind: EntryKind::MacroDef(self.lazy(MacroDef {
                 body: pprust::tokens_to_string(macro_def.body.clone()),
                 legacy: macro_def.legacy,
             })),
-            visibility: self.lazy(&ty::Visibility::Public),
-            span: self.lazy(&macro_def.span),
+            visibility: self.lazy(ty::Visibility::Public),
+            span: self.lazy(macro_def.span),
             attributes: self.encode_attributes(&macro_def.attrs),
             stability: self.encode_stability(def_id),
             deprecation: self.encode_deprecation(def_id),
 
-            children: LazySeq::empty(),
+            children: Lazy::empty(),
             ty: None,
-            inherent_impls: LazySeq::empty(),
-            variances: LazySeq::empty(),
+            inherent_impls: Lazy::empty(),
+            variances: Lazy::empty(),
             generics: None,
             predicates: None,
             predicates_defined_on: None,
@@ -1363,15 +1362,15 @@ impl EncodeContext<'tcx> {
         let tcx = self.tcx;
         Entry {
             kind: entry_kind,
-            visibility: self.lazy(&ty::Visibility::Public),
-            span: self.lazy(&tcx.def_span(def_id)),
-            attributes: LazySeq::empty(),
-            children: LazySeq::empty(),
+            visibility: self.lazy(ty::Visibility::Public),
+            span: self.lazy(tcx.def_span(def_id)),
+            attributes: Lazy::empty(),
+            children: Lazy::empty(),
             stability: None,
             deprecation: None,
             ty: if encode_type { Some(self.encode_item_type(def_id)) } else { None },
-            inherent_impls: LazySeq::empty(),
-            variances: LazySeq::empty(),
+            inherent_impls: Lazy::empty(),
+            variances: Lazy::empty(),
             generics: None,
             predicates: None,
             predicates_defined_on: None,
@@ -1408,13 +1407,13 @@ impl EncodeContext<'tcx> {
                 let data = GeneratorData {
                     layout: layout.clone(),
                 };
-                EntryKind::Generator(self.lazy(&data))
+                EntryKind::Generator(self.lazy(data))
             }
 
             ty::Closure(def_id, substs) => {
                 let sig = substs.closure_sig(def_id, self.tcx);
-                let data = ClosureData { sig: self.lazy(&sig) };
-                EntryKind::Closure(self.lazy(&data))
+                let data = ClosureData { sig: self.lazy(sig) };
+                EntryKind::Closure(self.lazy(data))
             }
 
             _ => bug!("closure that is neither generator nor closure")
@@ -1422,16 +1421,16 @@ impl EncodeContext<'tcx> {
 
         Entry {
             kind,
-            visibility: self.lazy(&ty::Visibility::Public),
-            span: self.lazy(&tcx.def_span(def_id)),
+            visibility: self.lazy(ty::Visibility::Public),
+            span: self.lazy(tcx.def_span(def_id)),
             attributes: self.encode_attributes(&tcx.get_attrs(def_id)),
-            children: LazySeq::empty(),
+            children: Lazy::empty(),
             stability: None,
             deprecation: None,
 
             ty: Some(self.encode_item_type(def_id)),
-            inherent_impls: LazySeq::empty(),
-            variances: LazySeq::empty(),
+            inherent_impls: Lazy::empty(),
+            variances: Lazy::empty(),
             generics: Some(self.encode_generics(def_id)),
             predicates: None,
             predicates_defined_on: None,
@@ -1450,16 +1449,16 @@ impl EncodeContext<'tcx> {
 
         Entry {
             kind: EntryKind::Const(self.const_qualif(mir, body_id), const_data),
-            visibility: self.lazy(&ty::Visibility::Public),
-            span: self.lazy(&tcx.def_span(def_id)),
-            attributes: LazySeq::empty(),
-            children: LazySeq::empty(),
+            visibility: self.lazy(ty::Visibility::Public),
+            span: self.lazy(tcx.def_span(def_id)),
+            attributes: Lazy::empty(),
+            children: Lazy::empty(),
             stability: None,
             deprecation: None,
 
             ty: Some(self.encode_item_type(def_id)),
-            inherent_impls: LazySeq::empty(),
-            variances: LazySeq::empty(),
+            inherent_impls: Lazy::empty(),
+            variances: Lazy::empty(),
             generics: Some(self.encode_generics(def_id)),
             predicates: Some(self.encode_predicates(def_id)),
             predicates_defined_on: None,
@@ -1468,37 +1467,37 @@ impl EncodeContext<'tcx> {
         }
     }
 
-    fn encode_attributes(&mut self, attrs: &[ast::Attribute]) -> LazySeq<ast::Attribute> {
-        self.lazy_seq_ref(attrs)
+    fn encode_attributes(&mut self, attrs: &[ast::Attribute]) -> Lazy<[ast::Attribute]> {
+        self.lazy(attrs)
     }
 
-    fn encode_native_libraries(&mut self) -> LazySeq<NativeLibrary> {
+    fn encode_native_libraries(&mut self) -> Lazy<[NativeLibrary]> {
         let used_libraries = self.tcx.native_libraries(LOCAL_CRATE);
-        self.lazy_seq(used_libraries.iter().cloned())
+        self.lazy(used_libraries.iter().cloned())
     }
 
-    fn encode_foreign_modules(&mut self) -> LazySeq<ForeignModule> {
+    fn encode_foreign_modules(&mut self) -> Lazy<[ForeignModule]> {
         let foreign_modules = self.tcx.foreign_modules(LOCAL_CRATE);
-        self.lazy_seq(foreign_modules.iter().cloned())
+        self.lazy(foreign_modules.iter().cloned())
     }
 
-    fn encode_proc_macros(&mut self) -> Option<LazySeq<DefIndex>> {
+    fn encode_proc_macros(&mut self) -> Option<Lazy<[DefIndex]>> {
         let is_proc_macro = self.tcx.sess.crate_types.borrow().contains(&CrateType::ProcMacro);
         if is_proc_macro {
-            let proc_macros: Vec<_> = self.tcx.hir().krate().items.values().filter_map(|item| {
+            let tcx = self.tcx;
+            Some(self.lazy(tcx.hir().krate().items.values().filter_map(|item| {
                 if item.attrs.iter().any(|attr| is_proc_macro_attr(attr)) {
                     Some(item.hir_id.owner)
                 } else {
                     None
                 }
-            }).collect();
-            Some(self.lazy_seq(proc_macros))
+            })))
         } else {
             None
         }
     }
 
-    fn encode_crate_deps(&mut self) -> LazySeq<CrateDep> {
+    fn encode_crate_deps(&mut self) -> Lazy<[CrateDep]> {
         let crates = self.tcx.crates();
 
         let mut deps = crates
@@ -1529,20 +1528,20 @@ impl EncodeContext<'tcx> {
         // the assumption that they are numbered 1 to n.
         // FIXME (#2166): This is not nearly enough to support correct versioning
         // but is enough to get transitive crate dependencies working.
-        self.lazy_seq_ref(deps.iter().map(|&(_, ref dep)| dep))
+        self.lazy(deps.iter().map(|&(_, ref dep)| dep))
     }
 
-    fn encode_lib_features(&mut self) -> LazySeq<(ast::Name, Option<ast::Name>)> {
+    fn encode_lib_features(&mut self) -> Lazy<[(ast::Name, Option<ast::Name>)]> {
         let tcx = self.tcx;
         let lib_features = tcx.lib_features();
-        self.lazy_seq(lib_features.to_vec())
+        self.lazy(lib_features.to_vec())
     }
 
-    fn encode_lang_items(&mut self) -> LazySeq<(DefIndex, usize)> {
+    fn encode_lang_items(&mut self) -> Lazy<[(DefIndex, usize)]> {
         let tcx = self.tcx;
         let lang_items = tcx.lang_items();
         let lang_items = lang_items.items().iter();
-        self.lazy_seq(lang_items.enumerate().filter_map(|(i, &opt_def_id)| {
+        self.lazy(lang_items.enumerate().filter_map(|(i, &opt_def_id)| {
             if let Some(def_id) = opt_def_id {
                 if def_id.is_local() {
                     return Some((def_id.index, i));
@@ -1552,13 +1551,13 @@ impl EncodeContext<'tcx> {
         }))
     }
 
-    fn encode_lang_items_missing(&mut self) -> LazySeq<lang_items::LangItem> {
+    fn encode_lang_items_missing(&mut self) -> Lazy<[lang_items::LangItem]> {
         let tcx = self.tcx;
-        self.lazy_seq_ref(&tcx.lang_items().missing)
+        self.lazy(&tcx.lang_items().missing)
     }
 
     /// Encodes an index, mapping each trait to its (local) implementations.
-    fn encode_impls(&mut self) -> LazySeq<TraitImpls> {
+    fn encode_impls(&mut self) -> Lazy<[TraitImpls]> {
         debug!("EncodeContext::encode_impls()");
         let tcx = self.tcx;
         let mut visitor = ImplVisitor {
@@ -1584,12 +1583,12 @@ impl EncodeContext<'tcx> {
 
                 TraitImpls {
                     trait_id: (trait_def_id.krate.as_u32(), trait_def_id.index),
-                    impls: self.lazy_seq_ref(&impls),
+                    impls: self.lazy(&impls),
                 }
             })
             .collect();
 
-        self.lazy_seq_ref(&all_impls)
+        self.lazy(&all_impls)
     }
 
     // Encodes all symbols exported from this crate into the metadata.
@@ -1600,12 +1599,12 @@ impl EncodeContext<'tcx> {
     // definition (as that's not defined in this crate).
     fn encode_exported_symbols(&mut self,
                                exported_symbols: &[(ExportedSymbol<'tcx>, SymbolExportLevel)])
-                               -> LazySeq<(ExportedSymbol<'tcx>, SymbolExportLevel)> {
+                               -> Lazy<[(ExportedSymbol<'tcx>, SymbolExportLevel)]> {
         // The metadata symbol name is special. It should not show up in
         // downstream crates.
         let metadata_symbol_name = SymbolName::new(&metadata_symbol_name(self.tcx));
 
-        self.lazy_seq(exported_symbols
+        self.lazy(exported_symbols
             .iter()
             .filter(|&&(ref exported_symbol, _)| {
                 match *exported_symbol {
@@ -1618,10 +1617,10 @@ impl EncodeContext<'tcx> {
             .cloned())
     }
 
-    fn encode_dylib_dependency_formats(&mut self) -> LazySeq<Option<LinkagePreference>> {
+    fn encode_dylib_dependency_formats(&mut self) -> Lazy<[Option<LinkagePreference>]> {
         match self.tcx.sess.dependency_formats.borrow().get(&config::CrateType::Dylib) {
             Some(arr) => {
-                self.lazy_seq(arr.iter().map(|slot| {
+                self.lazy(arr.iter().map(|slot| {
                     match *slot {
                         Linkage::NotLinked |
                         Linkage::IncludedFromDylib => None,
@@ -1631,7 +1630,7 @@ impl EncodeContext<'tcx> {
                     }
                 }))
             }
-            None => LazySeq::empty(),
+            None => Lazy::empty(),
         }
     }
 
@@ -1647,9 +1646,9 @@ impl EncodeContext<'tcx> {
                 let data = FnData {
                     constness: hir::Constness::NotConst,
                     arg_names: self.encode_fn_arg_names(names),
-                    sig: self.lazy(&tcx.fn_sig(def_id)),
+                    sig: self.lazy(tcx.fn_sig(def_id)),
                 };
-                EntryKind::ForeignFn(self.lazy(&data))
+                EntryKind::ForeignFn(self.lazy(data))
             }
             hir::ForeignItemKind::Static(_, hir::MutMutable) => EntryKind::ForeignMutStatic,
             hir::ForeignItemKind::Static(_, hir::MutImmutable) => EntryKind::ForeignImmStatic,
@@ -1658,18 +1657,18 @@ impl EncodeContext<'tcx> {
 
         Entry {
             kind,
-            visibility: self.lazy(&ty::Visibility::from_hir(&nitem.vis, nitem.hir_id, tcx)),
-            span: self.lazy(&nitem.span),
+            visibility: self.lazy(ty::Visibility::from_hir(&nitem.vis, nitem.hir_id, tcx)),
+            span: self.lazy(nitem.span),
             attributes: self.encode_attributes(&nitem.attrs),
-            children: LazySeq::empty(),
+            children: Lazy::empty(),
             stability: self.encode_stability(def_id),
             deprecation: self.encode_deprecation(def_id),
 
             ty: Some(self.encode_item_type(def_id)),
-            inherent_impls: LazySeq::empty(),
+            inherent_impls: Lazy::empty(),
             variances: match nitem.node {
                 hir::ForeignItemKind::Fn(..) => self.encode_variances_of(def_id),
-                _ => LazySeq::empty(),
+                _ => Lazy::empty(),
             },
             generics: Some(self.encode_generics(def_id)),
             predicates: Some(self.encode_predicates(def_id)),
diff --git a/src/librustc_metadata/index.rs b/src/librustc_metadata/index.rs
index dd2f59922ef..6f248f22cf2 100644
--- a/src/librustc_metadata/index.rs
+++ b/src/librustc_metadata/index.rs
@@ -108,18 +108,18 @@ impl Index<'tcx> {
         position.write_to_bytes_at(positions, array_index)
     }
 
-    pub fn write_index(&self, buf: &mut Encoder) -> LazySeq<Self> {
+    pub fn write_index(&self, buf: &mut Encoder) -> Lazy<[Self]> {
         let pos = buf.position();
 
         // First we write the length of the lower range ...
         buf.emit_raw_bytes(&(self.positions.len() as u32 / 4).to_le_bytes());
         // ... then the values.
         buf.emit_raw_bytes(&self.positions);
-        LazySeq::with_position_and_length(pos as usize, self.positions.len() / 4 + 1)
+        Lazy::from_position_and_meta(pos as usize, self.positions.len() / 4 + 1)
     }
 }
 
-impl LazySeq<Index<'tcx>> {
+impl Lazy<[Index<'tcx>]> {
     /// Given the metadata, extract out the offset of a particular
     /// DefIndex (if any).
     #[inline(never)]
@@ -127,7 +127,7 @@ impl LazySeq<Index<'tcx>> {
         let bytes = &bytes[self.position..];
         debug!("Index::lookup: index={:?} len={:?}",
                def_index,
-               self.len);
+               self.meta);
 
         let position = u32::read_from_bytes_at(bytes, 1 + def_index.index());
         if position == u32::MAX {
@@ -135,7 +135,7 @@ impl LazySeq<Index<'tcx>> {
             None
         } else {
             debug!("Index::lookup: position={:?}", position);
-            Some(Lazy::with_position(position as usize))
+            Some(Lazy::from_position(position as usize))
         }
     }
 }
diff --git a/src/librustc_metadata/schema.rs b/src/librustc_metadata/schema.rs
index 13c599cf997..f37877b437e 100644
--- a/src/librustc_metadata/schema.rs
+++ b/src/librustc_metadata/schema.rs
@@ -41,6 +41,33 @@ pub const METADATA_VERSION: u8 = 4;
 pub const METADATA_HEADER: &[u8; 12] =
     &[0, 0, 0, 0, b'r', b'u', b's', b't', 0, 0, 0, METADATA_VERSION];
 
+/// Additional metadata for a `Lazy<T>` where `T` may not be `Sized`,
+/// e.g. for `Lazy<[T]>`, this is the length (count of `T` values).
+pub trait LazyMeta {
+    type Meta: Copy + 'static;
+
+    /// Returns the minimum encoded size.
+    // FIXME(eddyb) Give better estimates for certain types.
+    fn min_size(meta: Self::Meta) -> usize;
+}
+
+impl<T> LazyMeta for T {
+    type Meta = ();
+
+    fn min_size(_: ()) -> usize {
+        assert_ne!(std::mem::size_of::<T>(), 0);
+        1
+    }
+}
+
+impl<T> LazyMeta for [T] {
+    type Meta = usize;
+
+    fn min_size(len: usize) -> usize {
+        len * T::min_size(())
+    }
+}
+
 /// A value of type T referred to by its absolute position
 /// in the metadata, and which can be decoded lazily.
 ///
@@ -56,40 +83,8 @@ pub const METADATA_HEADER: &[u8; 12] =
 /// Distances start at 1, as 0-byte nodes are invalid.
 /// Also invalid are nodes being referred in a different
 /// order than they were encoded in.
-#[must_use]
-pub struct Lazy<T> {
-    pub position: usize,
-    _marker: PhantomData<T>,
-}
-
-impl<T> Lazy<T> {
-    pub fn with_position(position: usize) -> Lazy<T> {
-        Lazy {
-            position,
-            _marker: PhantomData,
-        }
-    }
-
-    /// Returns the minimum encoded size of a value of type `T`.
-    // FIXME(eddyb) Give better estimates for certain types.
-    pub fn min_size() -> usize {
-        1
-    }
-}
-
-impl<T> Copy for Lazy<T> {}
-impl<T> Clone for Lazy<T> {
-    fn clone(&self) -> Self {
-        *self
-    }
-}
-
-impl<T> rustc_serialize::UseSpecializedEncodable for Lazy<T> {}
-impl<T> rustc_serialize::UseSpecializedDecodable for Lazy<T> {}
-
-/// A sequence of type T referred to by its absolute position
-/// in the metadata and length, and which can be decoded lazily.
-/// The sequence is a single node for the purposes of `Lazy`.
+///
+/// # Sequences (`Lazy<[T]>`)
 ///
 /// Unlike `Lazy<Vec<T>>`, the length is encoded next to the
 /// position, not at the position, which means that the length
@@ -100,54 +95,62 @@ impl<T> rustc_serialize::UseSpecializedDecodable for Lazy<T> {}
 /// the minimal distance the length of the sequence, i.e.
 /// it's assumed there's no 0-byte element in the sequence.
 #[must_use]
-pub struct LazySeq<T> {
-    pub len: usize,
+// FIXME(#59875) the `Meta` parameter only exists to dodge
+// invariance wrt `T` (coming from the `meta: T::Meta` field).
+pub struct Lazy<T, Meta = <T as LazyMeta>::Meta>
+    where T: ?Sized + LazyMeta<Meta = Meta>,
+          Meta: 'static + Copy,
+{
     pub position: usize,
+    pub meta: Meta,
     _marker: PhantomData<T>,
 }
 
-impl<T> LazySeq<T> {
-    pub fn empty() -> LazySeq<T> {
-        LazySeq::with_position_and_length(0, 0)
-    }
-
-    pub fn with_position_and_length(position: usize, len: usize) -> LazySeq<T> {
-        LazySeq {
-            len,
+impl<T: ?Sized + LazyMeta> Lazy<T> {
+    pub fn from_position_and_meta(position: usize, meta: T::Meta) -> Lazy<T> {
+        Lazy {
             position,
+            meta,
             _marker: PhantomData,
         }
     }
+}
+
+impl<T> Lazy<T> {
+    pub fn from_position(position: usize) -> Lazy<T> {
+        Lazy::from_position_and_meta(position, ())
+    }
+}
 
-    /// Returns the minimum encoded size of `length` values of type `T`.
-    pub fn min_size(length: usize) -> usize {
-        length
+impl<T> Lazy<[T]> {
+    pub fn empty() -> Lazy<[T]> {
+        Lazy::from_position_and_meta(0, 0)
     }
 }
 
-impl<T> Copy for LazySeq<T> {}
-impl<T> Clone for LazySeq<T> {
+impl<T: ?Sized + LazyMeta> Copy for Lazy<T> {}
+impl<T: ?Sized + LazyMeta> Clone for Lazy<T> {
     fn clone(&self) -> Self {
         *self
     }
 }
 
-impl<T> rustc_serialize::UseSpecializedEncodable for LazySeq<T> {}
-impl<T> rustc_serialize::UseSpecializedDecodable for LazySeq<T> {}
+impl<T: ?Sized + LazyMeta> rustc_serialize::UseSpecializedEncodable for Lazy<T> {}
+impl<T: ?Sized + LazyMeta> rustc_serialize::UseSpecializedDecodable for Lazy<T> {}
 
-/// Encoding / decoding state for `Lazy` and `LazySeq`.
+/// Encoding / decoding state for `Lazy`.
 #[derive(Copy, Clone, PartialEq, Eq, Debug)]
 pub enum LazyState {
     /// Outside of a metadata node.
     NoNode,
 
-    /// Inside a metadata node, and before any `Lazy` or `LazySeq`.
+    /// Inside a metadata node, and before any `Lazy`.
     /// The position is that of the node itself.
     NodeStart(usize),
 
-    /// Inside a metadata node, with a previous `Lazy` or `LazySeq`.
+    /// Inside a metadata node, with a previous `Lazy`.
     /// The position is a conservative estimate of where that
-    /// previous `Lazy` / `LazySeq` would end (see their comments).
+    /// previous `Lazy` would end (see their comments).
     Previous(usize),
 }
 
@@ -167,24 +170,24 @@ pub struct CrateRoot<'tcx> {
     pub proc_macro_decls_static: Option<DefIndex>,
     pub proc_macro_stability: Option<attr::Stability>,
 
-    pub crate_deps: LazySeq<CrateDep>,
-    pub dylib_dependency_formats: LazySeq<Option<LinkagePreference>>,
-    pub lib_features: LazySeq<(Symbol, Option<Symbol>)>,
-    pub lang_items: LazySeq<(DefIndex, usize)>,
-    pub lang_items_missing: LazySeq<lang_items::LangItem>,
-    pub native_libraries: LazySeq<NativeLibrary>,
-    pub foreign_modules: LazySeq<ForeignModule>,
-    pub source_map: LazySeq<syntax_pos::SourceFile>,
+    pub crate_deps: Lazy<[CrateDep]>,
+    pub dylib_dependency_formats: Lazy<[Option<LinkagePreference>]>,
+    pub lib_features: Lazy<[(Symbol, Option<Symbol>)]>,
+    pub lang_items: Lazy<[(DefIndex, usize)]>,
+    pub lang_items_missing: Lazy<[lang_items::LangItem]>,
+    pub native_libraries: Lazy<[NativeLibrary]>,
+    pub foreign_modules: Lazy<[ForeignModule]>,
+    pub source_map: Lazy<[syntax_pos::SourceFile]>,
     pub def_path_table: Lazy<hir::map::definitions::DefPathTable>,
-    pub impls: LazySeq<TraitImpls>,
-    pub exported_symbols: LazySeq<(ExportedSymbol<'tcx>, SymbolExportLevel)>,
-    pub interpret_alloc_index: LazySeq<u32>,
+    pub impls: Lazy<[TraitImpls]>,
+    pub exported_symbols: Lazy<[(ExportedSymbol<'tcx>, SymbolExportLevel)]>,
+    pub interpret_alloc_index: Lazy<[u32]>,
 
-    pub entries_index: LazySeq<index::Index<'tcx>>,
+    pub entries_index: Lazy<[index::Index<'tcx>]>,
 
     /// The DefIndex's of any proc macros delcared by
     /// this crate
-    pub proc_macro_data: Option<LazySeq<DefIndex>>,
+    pub proc_macro_data: Option<Lazy<[DefIndex]>>,
 
     pub compiler_builtins: bool,
     pub needs_allocator: bool,
@@ -207,7 +210,7 @@ pub struct CrateDep {
 #[derive(RustcEncodable, RustcDecodable)]
 pub struct TraitImpls {
     pub trait_id: (u32, DefIndex),
-    pub impls: LazySeq<DefIndex>,
+    pub impls: Lazy<[DefIndex]>,
 }
 
 #[derive(RustcEncodable, RustcDecodable)]
@@ -215,14 +218,14 @@ pub struct Entry<'tcx> {
     pub kind: EntryKind<'tcx>,
     pub visibility: Lazy<ty::Visibility>,
     pub span: Lazy<Span>,
-    pub attributes: LazySeq<ast::Attribute>,
-    pub children: LazySeq<DefIndex>,
+    pub attributes: Lazy<[ast::Attribute]>,
+    pub children: Lazy<[DefIndex]>,
     pub stability: Option<Lazy<attr::Stability>>,
     pub deprecation: Option<Lazy<attr::Deprecation>>,
 
     pub ty: Option<Lazy<Ty<'tcx>>>,
-    pub inherent_impls: LazySeq<DefIndex>,
-    pub variances: LazySeq<ty::Variance>,
+    pub inherent_impls: Lazy<[DefIndex]>,
+    pub variances: Lazy<[ty::Variance]>,
     pub generics: Option<Lazy<ty::Generics>>,
     pub predicates: Option<Lazy<ty::GenericPredicates<'tcx>>>,
     pub predicates_defined_on: Option<Lazy<ty::GenericPredicates<'tcx>>>,
@@ -278,7 +281,7 @@ pub struct RenderedConst(pub String);
 
 #[derive(RustcEncodable, RustcDecodable)]
 pub struct ModData {
-    pub reexports: LazySeq<def::Export<hir::HirId>>,
+    pub reexports: Lazy<[def::Export<hir::HirId>]>,
 }
 
 #[derive(RustcEncodable, RustcDecodable)]
@@ -290,7 +293,7 @@ pub struct MacroDef {
 #[derive(RustcEncodable, RustcDecodable)]
 pub struct FnData<'tcx> {
     pub constness: hir::Constness,
-    pub arg_names: LazySeq<ast::Name>,
+    pub arg_names: Lazy<[ast::Name]>,
     pub sig: Lazy<ty::PolyFnSig<'tcx>>,
 }
 
diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs
index fc1ee649e28..9c7ac83e82e 100644
--- a/src/librustc_typeck/check/mod.rs
+++ b/src/librustc_typeck/check/mod.rs
@@ -4197,8 +4197,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
     /// A possible error is to forget to add `.await` when using futures:
     ///
     /// ```
-    /// #![feature(async_await)]
-    ///
     /// async fn make_u32() -> u32 {
     ///     22
     /// }
diff --git a/src/librustc_typeck/error_codes.rs b/src/librustc_typeck/error_codes.rs
index ca9ce3d22b5..b52183d4b1b 100644
--- a/src/librustc_typeck/error_codes.rs
+++ b/src/librustc_typeck/error_codes.rs
@@ -4751,7 +4751,6 @@ E0733: r##"
 Recursion in an `async fn` requires boxing. For example, this will not compile:
 
 ```edition2018,compile_fail,E0733
-#![feature(async_await)]
 async fn foo(n: usize) {
     if n > 0 {
         foo(n - 1).await;
@@ -4763,12 +4762,11 @@ To achieve async recursion, the `async fn` needs to be desugared
 such that the `Future` is explicit in the return type:
 
 ```edition2018,compile_fail,E0720
-# #![feature(async_await)]
 use std::future::Future;
-fn foo_desugered(n: usize) -> impl Future<Output = ()> {
+fn foo_desugared(n: usize) -> impl Future<Output = ()> {
     async move {
         if n > 0 {
-            foo_desugered(n - 1).await;
+            foo_desugared(n - 1).await;
         }
     }
 }
@@ -4777,7 +4775,6 @@ fn foo_desugered(n: usize) -> impl Future<Output = ()> {
 Finally, the future is wrapped in a pinned box:
 
 ```edition2018
-# #![feature(async_await)]
 use std::future::Future;
 use std::pin::Pin;
 fn foo_recursive(n: usize) -> Pin<Box<dyn Future<Output = ()>>> {
diff --git a/src/libstd/keyword_docs.rs b/src/libstd/keyword_docs.rs
index f5018485ef7..85a9dea09ed 100644
--- a/src/libstd/keyword_docs.rs
+++ b/src/libstd/keyword_docs.rs
@@ -984,7 +984,6 @@ mod where_keyword { }
 
 // 2018 Edition keywords
 
-#[unstable(feature = "async_await", issue = "50547")]
 #[doc(keyword = "async")]
 //
 /// Return a [`Future`] instead of blocking the current thread.
@@ -995,7 +994,6 @@ mod where_keyword { }
 /// [not yet complete]: https://github.com/rust-lang/rust/issues/34601
 mod async_keyword { }
 
-#[unstable(feature = "async_await", issue = "50547")]
 #[doc(keyword = "await")]
 //
 /// Suspend execution until the result of a [`Future`] is ready.
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs
index bbc3ae28225..bce0b07db1c 100644
--- a/src/libsyntax/feature_gate.rs
+++ b/src/libsyntax/feature_gate.rs
@@ -461,9 +461,6 @@ declare_features! (
     // Allows using `#[doc(keyword = "...")]`.
     (active, doc_keyword, "1.28.0", Some(51315), None),
 
-    // Allows async and await syntax.
-    (active, async_await, "1.28.0", Some(50547), None),
-
     // Allows reinterpretation of the bits of a value of one type as another type during const eval.
     (active, const_transmute, "1.29.0", Some(53605), None),
 
@@ -857,6 +854,8 @@ declare_features! (
     (accepted, repr_align_enum, "1.37.0", Some(57996), None),
     // Allows `const _: TYPE = VALUE`.
     (accepted, underscore_const_names, "1.37.0", Some(54912), None),
+    // Allows free and inherent `async fn`s, `async` blocks, and `<expr>.await` expressions.
+    (accepted, async_await, "1.38.0", Some(50547), None),
 
     // -------------------------------------------------------------------------
     // feature-group-end: accepted features
@@ -2100,12 +2099,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
                                     "labels on blocks are unstable");
                 }
             }
-            ast::ExprKind::Async(..) => {
-                gate_feature_post!(&self, async_await, e.span, "async blocks are unstable");
-            }
-            ast::ExprKind::Await(_) => {
-                gate_feature_post!(&self, async_await, e.span, "async/await is unstable");
-            }
             _ => {}
         }
         visit::walk_expr(self, e)
@@ -2154,11 +2147,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
                 span: Span,
                 _node_id: NodeId) {
         if let Some(header) = fn_kind.header() {
-            // Check for const fn and async fn declarations.
-            if header.asyncness.node.is_async() {
-                gate_feature_post!(&self, async_await, span, "async fn is unstable");
-            }
-
             // Stability of const fn methods are covered in
             // `visit_trait_item` and `visit_impl_item` below; this is
             // because default methods don't pass through this point.
@@ -2198,9 +2186,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
                 if block.is_none() {
                     self.check_abi(sig.header.abi, ti.span);
                 }
-                if sig.header.asyncness.node.is_async() {
-                    gate_feature_post!(&self, async_await, ti.span, "async fn is unstable");
-                }
                 if sig.decl.c_variadic {
                     gate_feature_post!(&self, c_variadic, ti.span,
                                        "C-variadic functions are unstable");
diff --git a/src/test/codegen/issue-45222.rs b/src/test/codegen/issue-45222.rs
index 7f99ca724cf..7aadc8a0954 100644
--- a/src/test/codegen/issue-45222.rs
+++ b/src/test/codegen/issue-45222.rs
@@ -5,7 +5,6 @@
 
 // verify that LLVM recognizes a loop involving 0..=n and will const-fold it.
 
-//------------------------------------------------------------------------------
 // Example from original issue #45222
 
 fn foo2(n: u64) -> u64 {
@@ -25,7 +24,6 @@ pub fn check_foo2() -> u64 {
     foo2(100000)
 }
 
-//------------------------------------------------------------------------------
 // Simplified example of #45222
 
 fn triangle_inc(n: u64) -> u64 {
@@ -43,7 +41,6 @@ pub fn check_triangle_inc() -> u64 {
     triangle_inc(100000)
 }
 
-//------------------------------------------------------------------------------
 // Demo in #48012
 
 fn foo3r(n: u64) -> u64 {
diff --git a/src/test/incremental/hashes/call_expressions.rs b/src/test/incremental/hashes/call_expressions.rs
index d859cbef39f..50d3657d417 100644
--- a/src/test/incremental/hashes/call_expressions.rs
+++ b/src/test/incremental/hashes/call_expressions.rs
@@ -18,7 +18,7 @@ fn callee1(_x: u32, _y: i64) {}
 fn callee2(_x: u32, _y: i64) {}
 
 
-// Change Callee (Function) ----------------------------------------------------
+// Change Callee (Function)
 #[cfg(cfail1)]
 pub fn change_callee_function() {
     callee1(1, 2)
@@ -33,7 +33,7 @@ pub fn change_callee_function() {
 
 
 
-// Change Argument (Function) --------------------------------------------------
+// Change Argument (Function)
 #[cfg(cfail1)]
 pub fn change_argument_function() {
     callee1(1, 2)
@@ -48,7 +48,7 @@ pub fn change_argument_function() {
 
 
 
-// Change Callee Indirectly (Function) -----------------------------------------
+// Change Callee Indirectly (Function)
 mod change_callee_indirectly_function {
     #[cfg(cfail1)]
     use super::callee1 as callee;
@@ -73,7 +73,7 @@ impl Struct {
     fn method2(&self, _x: char, _y: bool) {}
 }
 
-// Change Callee (Method) ------------------------------------------------------
+// Change Callee (Method)
 #[cfg(cfail1)]
 pub fn change_callee_method() {
     let s = Struct;
@@ -90,7 +90,7 @@ pub fn change_callee_method() {
 
 
 
-// Change Argument (Method) ----------------------------------------------------
+// Change Argument (Method)
 #[cfg(cfail1)]
 pub fn change_argument_method() {
     let s = Struct;
@@ -107,7 +107,7 @@ pub fn change_argument_method() {
 
 
 
-// Change Callee (Method, UFCS) ------------------------------------------------
+// Change Callee (Method, UFCS)
 #[cfg(cfail1)]
 pub fn change_ufcs_callee_method() {
     let s = Struct;
@@ -124,7 +124,7 @@ pub fn change_ufcs_callee_method() {
 
 
 
-// Change Argument (Method, UFCS) ----------------------------------------------
+// Change Argument (Method, UFCS)
 #[cfg(cfail1)]
 pub fn change_argument_method_ufcs() {
     let s = Struct;
@@ -141,7 +141,7 @@ pub fn change_argument_method_ufcs() {
 
 
 
-// Change To UFCS --------------------------------------------------------------
+// Change To UFCS
 #[cfg(cfail1)]
 pub fn change_to_ufcs() {
     let s = Struct;
@@ -164,7 +164,7 @@ impl Struct2 {
     fn method1(&self, _x: char, _y: bool) {}
 }
 
-// Change UFCS Callee Indirectly -----------------------------------------------
+// Change UFCS Callee Indirectly
 pub mod change_ufcs_callee_indirectly {
     #[cfg(cfail1)]
     use super::Struct as Struct;
diff --git a/src/test/incremental/hashes/closure_expressions.rs b/src/test/incremental/hashes/closure_expressions.rs
index 24ab6b8e184..08693560d0b 100644
--- a/src/test/incremental/hashes/closure_expressions.rs
+++ b/src/test/incremental/hashes/closure_expressions.rs
@@ -14,7 +14,7 @@
 #![crate_type="rlib"]
 
 
-// Change closure body ---------------------------------------------------------
+// Change closure body
 #[cfg(cfail1)]
 pub fn change_closure_body() {
     let _ = || 1u32;
@@ -29,7 +29,7 @@ pub fn change_closure_body() {
 
 
 
-// Add parameter ---------------------------------------------------------------
+// Add parameter
 #[cfg(cfail1)]
 pub fn add_parameter() {
     let x = 0u32;
@@ -46,7 +46,7 @@ pub fn add_parameter() {
 
 
 
-// Change parameter pattern ----------------------------------------------------
+// Change parameter pattern
 #[cfg(cfail1)]
 pub fn change_parameter_pattern() {
     let _ = |x: (u32,)| x;
@@ -61,7 +61,7 @@ pub fn change_parameter_pattern() {
 
 
 
-// Add `move` to closure -------------------------------------------------------
+// Add `move` to closure
 #[cfg(cfail1)]
 pub fn add_move() {
     let _ = || 1;
@@ -76,7 +76,7 @@ pub fn add_move() {
 
 
 
-// Add type ascription to parameter --------------------------------------------
+// Add type ascription to parameter
 #[cfg(cfail1)]
 pub fn add_type_ascription_to_parameter() {
     let closure = |x| x + 1u32;
@@ -93,7 +93,7 @@ pub fn add_type_ascription_to_parameter() {
 
 
 
-// Change parameter type -------------------------------------------------------
+// Change parameter type
 #[cfg(cfail1)]
 pub fn change_parameter_type() {
     let closure = |x: u32| (x as u64) + 1;
diff --git a/src/test/incremental/hashes/consts.rs b/src/test/incremental/hashes/consts.rs
index 8e713a1d992..3d2eed89636 100644
--- a/src/test/incremental/hashes/consts.rs
+++ b/src/test/incremental/hashes/consts.rs
@@ -14,7 +14,7 @@
 #![crate_type="rlib"]
 
 
-// Change const visibility ---------------------------------------------------
+// Change const visibility
 #[cfg(cfail1)]
 const CONST_VISIBILITY: u8 = 0;
 
@@ -24,7 +24,7 @@ const CONST_VISIBILITY: u8 = 0;
 pub const CONST_VISIBILITY: u8 = 0;
 
 
-// Change type from i32 to u32 ------------------------------------------------
+// Change type from i32 to u32
 #[cfg(cfail1)]
 const CONST_CHANGE_TYPE_1: i32 = 0;
 
@@ -34,7 +34,7 @@ const CONST_CHANGE_TYPE_1: i32 = 0;
 const CONST_CHANGE_TYPE_1: u32 = 0;
 
 
-// Change type from Option<u32> to Option<u64> --------------------------------
+// Change type from Option<u32> to Option<u64>
 #[cfg(cfail1)]
 const CONST_CHANGE_TYPE_2: Option<u32> = None;
 
@@ -44,7 +44,7 @@ const CONST_CHANGE_TYPE_2: Option<u32> = None;
 const CONST_CHANGE_TYPE_2: Option<u64> = None;
 
 
-// Change value between simple literals ---------------------------------------
+// Change value between simple literals
 #[rustc_clean(cfg="cfail2", except="HirBody")]
 #[rustc_clean(cfg="cfail3")]
 const CONST_CHANGE_VALUE_1: i16 = {
@@ -56,7 +56,7 @@ const CONST_CHANGE_VALUE_1: i16 = {
 };
 
 
-// Change value between expressions -------------------------------------------
+// Change value between expressions
 #[rustc_clean(cfg="cfail2", except="HirBody")]
 #[rustc_clean(cfg="cfail3")]
 const CONST_CHANGE_VALUE_2: i16 = {
@@ -88,7 +88,7 @@ const CONST_CHANGE_VALUE_4: i16 = {
 };
 
 
-// Change type indirectly -----------------------------------------------------
+// Change type indirectly
 struct ReferencedType1;
 struct ReferencedType2;
 
diff --git a/src/test/incremental/hashes/if_expressions.rs b/src/test/incremental/hashes/if_expressions.rs
index b84c393573b..4b73f1371f8 100644
--- a/src/test/incremental/hashes/if_expressions.rs
+++ b/src/test/incremental/hashes/if_expressions.rs
@@ -14,7 +14,7 @@
 #![feature(rustc_attrs)]
 #![crate_type="rlib"]
 
-// Change condition (if) -------------------------------------------------------
+// Change condition (if)
 #[cfg(cfail1)]
 pub fn change_condition(x: bool) -> u32 {
     if x {
@@ -35,7 +35,7 @@ pub fn change_condition(x: bool) -> u32 {
     return 0
 }
 
-// Change then branch (if) -----------------------------------------------------
+// Change then branch (if)
 #[cfg(cfail1)]
 pub fn change_then_branch(x: bool) -> u32 {
     if x {
@@ -58,7 +58,7 @@ pub fn change_then_branch(x: bool) -> u32 {
 
 
 
-// Change else branch (if) -----------------------------------------------------
+// Change else branch (if)
 #[cfg(cfail1)]
 pub fn change_else_branch(x: bool) -> u32 {
     if x {
@@ -81,7 +81,7 @@ pub fn change_else_branch(x: bool) -> u32 {
 
 
 
-// Add else branch (if) --------------------------------------------------------
+// Add else branch (if)
 #[cfg(cfail1)]
 pub fn add_else_branch(x: bool) -> u32 {
     let mut ret = 1;
@@ -109,7 +109,7 @@ pub fn add_else_branch(x: bool) -> u32 {
 
 
 
-// Change condition (if let) ---------------------------------------------------
+// Change condition (if let)
 #[cfg(cfail1)]
 pub fn change_condition_if_let(x: Option<u32>) -> u32 {
     if let Some(_x) = x {
@@ -132,7 +132,7 @@ pub fn change_condition_if_let(x: Option<u32>) -> u32 {
 
 
 
-// Change then branch (if let) -------------------------------------------------
+// Change then branch (if let)
 #[cfg(cfail1)]
 pub fn change_then_branch_if_let(x: Option<u32>) -> u32 {
     if let Some(x) = x {
@@ -155,7 +155,7 @@ pub fn change_then_branch_if_let(x: Option<u32>) -> u32 {
 
 
 
-// Change else branch (if let) -------------------------------------------------
+// Change else branch (if let)
 #[cfg(cfail1)]
 pub fn change_else_branch_if_let(x: Option<u32>) -> u32 {
     if let Some(x) = x {
@@ -178,7 +178,7 @@ pub fn change_else_branch_if_let(x: Option<u32>) -> u32 {
 
 
 
-// Add else branch (if let) ----------------------------------------------------
+// Add else branch (if let)
 #[cfg(cfail1)]
 pub fn add_else_branch_if_let(x: Option<u32>) -> u32 {
     let mut ret = 1;
diff --git a/src/test/incremental/hashes/indexing_expressions.rs b/src/test/incremental/hashes/indexing_expressions.rs
index 4d39ed68701..08cf19d7760 100644
--- a/src/test/incremental/hashes/indexing_expressions.rs
+++ b/src/test/incremental/hashes/indexing_expressions.rs
@@ -13,7 +13,7 @@
 #![feature(rustc_attrs)]
 #![crate_type="rlib"]
 
-// Change simple index ---------------------------------------------------------
+// Change simple index
 #[cfg(cfail1)]
 fn change_simple_index(slice: &[u32]) -> u32 {
     slice[3]
@@ -30,7 +30,7 @@ fn change_simple_index(slice: &[u32]) -> u32 {
 
 
 
-// Change lower bound ----------------------------------------------------------
+// Change lower bound
 #[cfg(cfail1)]
 fn change_lower_bound(slice: &[u32]) -> &[u32] {
     &slice[3..5]
@@ -47,7 +47,7 @@ fn change_lower_bound(slice: &[u32]) -> &[u32] {
 
 
 
-// Change upper bound ----------------------------------------------------------
+// Change upper bound
 #[cfg(cfail1)]
 fn change_upper_bound(slice: &[u32]) -> &[u32] {
     &slice[3..5]
@@ -64,7 +64,7 @@ fn change_upper_bound(slice: &[u32]) -> &[u32] {
 
 
 
-// Add lower bound -------------------------------------------------------------
+// Add lower bound
 #[cfg(cfail1)]
 fn add_lower_bound(slice: &[u32]) -> &[u32] {
     &slice[..4]
@@ -81,7 +81,7 @@ fn add_lower_bound(slice: &[u32]) -> &[u32] {
 
 
 
-// Add upper bound -------------------------------------------------------------
+// Add upper bound
 #[cfg(cfail1)]
 fn add_upper_bound(slice: &[u32]) -> &[u32] {
     &slice[3..]
@@ -98,7 +98,7 @@ fn add_upper_bound(slice: &[u32]) -> &[u32] {
 
 
 
-// Change mutability -----------------------------------------------------------
+// Change mutability
 #[cfg(cfail1)]
 fn change_mutability(slice: &mut [u32]) -> u32 {
     (&mut slice[3..5])[0]
@@ -115,7 +115,7 @@ fn change_mutability(slice: &mut [u32]) -> u32 {
 
 
 
-// Exclusive to inclusive range ------------------------------------------------
+// Exclusive to inclusive range
 #[cfg(cfail1)]
 fn exclusive_to_inclusive_range(slice: &[u32]) -> &[u32] {
     &slice[3..7]
diff --git a/src/test/incremental/hashes/inline_asm.rs b/src/test/incremental/hashes/inline_asm.rs
index deb1c45a528..c50ee73d714 100644
--- a/src/test/incremental/hashes/inline_asm.rs
+++ b/src/test/incremental/hashes/inline_asm.rs
@@ -16,7 +16,7 @@
 
 
 
-// Change template -------------------------------------------------------------
+// Change template
 #[cfg(cfail1)]
 #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
 pub fn change_template(a: i32) -> i32 {
@@ -51,7 +51,7 @@ pub fn change_template(a: i32) -> i32 {
 
 
 
-// Change output -------------------------------------------------------------
+// Change output
 #[cfg(cfail1)]
 #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
 pub fn change_output(a: i32) -> i32 {
@@ -88,7 +88,7 @@ pub fn change_output(a: i32) -> i32 {
 
 
 
-// Change input -------------------------------------------------------------
+// Change input
 #[cfg(cfail1)]
 #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
 pub fn change_input(_a: i32, _b: i32) -> i32 {
@@ -123,7 +123,7 @@ pub fn change_input(_a: i32, _b: i32) -> i32 {
 
 
 
-// Change input constraint -----------------------------------------------------
+// Change input constraint
 #[cfg(cfail1)]
 #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
 pub fn change_input_constraint(_a: i32, _b: i32) -> i32 {
@@ -158,7 +158,7 @@ pub fn change_input_constraint(_a: i32, _b: i32) -> i32 {
 
 
 
-// Change clobber --------------------------------------------------------------
+// Change clobber
 #[cfg(cfail1)]
 #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
 pub fn change_clobber(_a: i32) -> i32 {
@@ -193,7 +193,7 @@ pub fn change_clobber(_a: i32) -> i32 {
 
 
 
-// Change options --------------------------------------------------------------
+// Change options
 #[cfg(cfail1)]
 #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
 pub fn change_options(_a: i32) -> i32 {
diff --git a/src/test/incremental/hashes/loop_expressions.rs b/src/test/incremental/hashes/loop_expressions.rs
index 6222d948c98..a2222db4c59 100644
--- a/src/test/incremental/hashes/loop_expressions.rs
+++ b/src/test/incremental/hashes/loop_expressions.rs
@@ -14,7 +14,7 @@
 #![crate_type="rlib"]
 
 
-// Change loop body ------------------------------------------------------------
+// Change loop body
 #[cfg(cfail1)]
 pub fn change_loop_body() {
     let mut _x = 0;
@@ -37,7 +37,7 @@ pub fn change_loop_body() {
 
 
 
-// Add break -------------------------------------------------------------------
+// Add break
 #[cfg(cfail1)]
 pub fn add_break() {
     let mut _x = 0;
@@ -59,7 +59,7 @@ pub fn add_break() {
 
 
 
-// Add loop label --------------------------------------------------------------
+// Add loop label
 #[cfg(cfail1)]
 pub fn add_loop_label() {
     let mut _x = 0;
@@ -82,7 +82,7 @@ pub fn add_loop_label() {
 
 
 
-// Add loop label to break -----------------------------------------------------
+// Add loop label to break
 #[cfg(cfail1)]
 pub fn add_loop_label_to_break() {
     let mut _x = 0;
@@ -105,7 +105,7 @@ pub fn add_loop_label_to_break() {
 
 
 
-// Change break label ----------------------------------------------------------
+// Change break label
 #[cfg(cfail1)]
 pub fn change_break_label() {
     let mut _x = 0;
@@ -132,7 +132,7 @@ pub fn change_break_label() {
 
 
 
-// Add loop label to continue --------------------------------------------------
+// Add loop label to continue
 #[cfg(cfail1)]
 pub fn add_loop_label_to_continue() {
     let mut _x = 0;
@@ -155,7 +155,7 @@ pub fn add_loop_label_to_continue() {
 
 
 
-// Change continue label ----------------------------------------------------------
+// Change continue label
 #[cfg(cfail1)]
 pub fn change_continue_label() {
     let mut _x = 0;
@@ -182,7 +182,7 @@ pub fn change_continue_label() {
 
 
 
-// Change continue to break ----------------------------------------------------
+// Change continue to break
 #[cfg(cfail1)]
 pub fn change_continue_to_break() {
     let mut _x = 0;
diff --git a/src/test/incremental/hashes/panic_exprs.rs b/src/test/incremental/hashes/panic_exprs.rs
index b370fcce8ef..70b0a5ab78c 100644
--- a/src/test/incremental/hashes/panic_exprs.rs
+++ b/src/test/incremental/hashes/panic_exprs.rs
@@ -17,7 +17,7 @@
 #![crate_type="rlib"]
 
 
-// Indexing expression ---------------------------------------------------------
+// Indexing expression
 #[rustc_clean(cfg="cfail2", except="HirBody,mir_built,optimized_mir")]
 #[rustc_clean(cfg="cfail3")]
 pub fn indexing(slice: &[u8]) -> u8 {
@@ -32,7 +32,7 @@ pub fn indexing(slice: &[u8]) -> u8 {
 }
 
 
-// Arithmetic overflow plus ----------------------------------------------------
+// Arithmetic overflow plus
 #[rustc_clean(cfg="cfail2", except="HirBody,mir_built,optimized_mir")]
 #[rustc_clean(cfg="cfail3")]
 pub fn arithmetic_overflow_plus(val: i32) -> i32 {
@@ -47,7 +47,7 @@ pub fn arithmetic_overflow_plus(val: i32) -> i32 {
 }
 
 
-// Arithmetic overflow minus ----------------------------------------------------
+// Arithmetic overflow minus
 #[rustc_clean(cfg="cfail2", except="HirBody,mir_built,optimized_mir")]
 #[rustc_clean(cfg="cfail3")]
 pub fn arithmetic_overflow_minus(val: i32) -> i32 {
@@ -62,7 +62,7 @@ pub fn arithmetic_overflow_minus(val: i32) -> i32 {
 }
 
 
-// Arithmetic overflow mult ----------------------------------------------------
+// Arithmetic overflow mult
 #[rustc_clean(cfg="cfail2", except="HirBody,mir_built,optimized_mir")]
 #[rustc_clean(cfg="cfail3")]
 pub fn arithmetic_overflow_mult(val: i32) -> i32 {
@@ -77,7 +77,7 @@ pub fn arithmetic_overflow_mult(val: i32) -> i32 {
 }
 
 
-// Arithmetic overflow negation ------------------------------------------------
+// Arithmetic overflow negation
 #[rustc_clean(cfg="cfail2", except="HirBody,mir_built,optimized_mir")]
 #[rustc_clean(cfg="cfail3")]
 pub fn arithmetic_overflow_negation(val: i32) -> i32 {
@@ -92,7 +92,7 @@ pub fn arithmetic_overflow_negation(val: i32) -> i32 {
 }
 
 
-// Division by zero ------------------------------------------------------------
+// Division by zero
 #[rustc_clean(cfg="cfail2", except="HirBody,mir_built,optimized_mir")]
 #[rustc_clean(cfg="cfail3")]
 pub fn division_by_zero(val: i32) -> i32 {
@@ -106,7 +106,7 @@ pub fn division_by_zero(val: i32) -> i32 {
     }
 }
 
-// Division by zero ------------------------------------------------------------
+// Division by zero
 #[rustc_clean(cfg="cfail2", except="HirBody,mir_built,optimized_mir")]
 #[rustc_clean(cfg="cfail3")]
 pub fn mod_by_zero(val: i32) -> i32 {
@@ -121,7 +121,7 @@ pub fn mod_by_zero(val: i32) -> i32 {
 }
 
 
-// shift left ------------------------------------------------------------------
+// shift left
 #[rustc_clean(cfg="cfail2", except="HirBody,mir_built,optimized_mir")]
 #[rustc_clean(cfg="cfail3")]
 pub fn shift_left(val: i32, shift: usize) -> i32 {
@@ -136,7 +136,7 @@ pub fn shift_left(val: i32, shift: usize) -> i32 {
 }
 
 
-// shift right ------------------------------------------------------------------
+// shift right
 #[rustc_clean(cfg="cfail2", except="HirBody,mir_built,optimized_mir")]
 #[rustc_clean(cfg="cfail3")]
 pub fn shift_right(val: i32, shift: usize) -> i32 {
diff --git a/src/test/incremental/hashes/statics.rs b/src/test/incremental/hashes/statics.rs
index 6f74e0fdbc0..d70ebb08b71 100644
--- a/src/test/incremental/hashes/statics.rs
+++ b/src/test/incremental/hashes/statics.rs
@@ -16,7 +16,7 @@
 #![crate_type="rlib"]
 
 
-// Change static visibility ---------------------------------------------------
+// Change static visibility
 #[cfg(cfail1)]
 static STATIC_VISIBILITY: u8 = 0;
 
@@ -26,7 +26,7 @@ static STATIC_VISIBILITY: u8 = 0;
 pub static STATIC_VISIBILITY: u8 = 0;
 
 
-// Change static mutability ---------------------------------------------------
+// Change static mutability
 #[cfg(cfail1)]
 static STATIC_MUTABILITY: u8 = 0;
 
@@ -36,7 +36,7 @@ static STATIC_MUTABILITY: u8 = 0;
 static mut STATIC_MUTABILITY: u8 = 0;
 
 
-// Add linkage attribute ------------------------------------------------------
+// Add linkage attribute
 #[cfg(cfail1)]
 static STATIC_LINKAGE: u8 = 0;
 
@@ -47,7 +47,7 @@ static STATIC_LINKAGE: u8 = 0;
 static STATIC_LINKAGE: u8 = 0;
 
 
-// Add no_mangle attribute ----------------------------------------------------
+// Add no_mangle attribute
 #[cfg(cfail1)]
 static STATIC_NO_MANGLE: u8 = 0;
 
@@ -58,7 +58,7 @@ static STATIC_NO_MANGLE: u8 = 0;
 static STATIC_NO_MANGLE: u8 = 0;
 
 
-// Add thread_local attribute -------------------------------------------------
+// Add thread_local attribute
 #[cfg(cfail1)]
 static STATIC_THREAD_LOCAL: u8 = 0;
 
@@ -69,7 +69,7 @@ static STATIC_THREAD_LOCAL: u8 = 0;
 static STATIC_THREAD_LOCAL: u8 = 0;
 
 
-// Change type from i16 to u64 ------------------------------------------------
+// Change type from i16 to u64
 #[cfg(cfail1)]
 static STATIC_CHANGE_TYPE_1: i16 = 0;
 
@@ -79,7 +79,7 @@ static STATIC_CHANGE_TYPE_1: i16 = 0;
 static STATIC_CHANGE_TYPE_1: u64 = 0;
 
 
-// Change type from Option<i8> to Option<u16> ---------------------------------
+// Change type from Option<i8> to Option<u16>
 #[cfg(cfail1)]
 static STATIC_CHANGE_TYPE_2: Option<i8> = None;
 
@@ -89,7 +89,7 @@ static STATIC_CHANGE_TYPE_2: Option<i8> = None;
 static STATIC_CHANGE_TYPE_2: Option<u16> = None;
 
 
-// Change value between simple literals ---------------------------------------
+// Change value between simple literals
 #[rustc_clean(cfg="cfail2", except="HirBody")]
 #[rustc_clean(cfg="cfail3")]
 static STATIC_CHANGE_VALUE_1: i16 = {
@@ -101,7 +101,7 @@ static STATIC_CHANGE_VALUE_1: i16 = {
 };
 
 
-// Change value between expressions -------------------------------------------
+// Change value between expressions
 #[rustc_clean(cfg="cfail2", except="HirBody")]
 #[rustc_clean(cfg="cfail3")]
 static STATIC_CHANGE_VALUE_2: i16 = {
@@ -133,7 +133,7 @@ static STATIC_CHANGE_VALUE_4: i16 = {
 };
 
 
-// Change type indirectly -----------------------------------------------------
+// Change type indirectly
 struct ReferencedType1;
 struct ReferencedType2;
 
diff --git a/src/test/incremental/hashes/struct_constructors.rs b/src/test/incremental/hashes/struct_constructors.rs
index b708b99eabc..456d5e74751 100644
--- a/src/test/incremental/hashes/struct_constructors.rs
+++ b/src/test/incremental/hashes/struct_constructors.rs
@@ -20,7 +20,7 @@ pub struct RegularStruct {
     z: i16,
 }
 
-// Change field value (regular struct) -----------------------------------------
+// Change field value (regular struct)
 #[cfg(cfail1)]
 pub fn change_field_value_regular_struct() -> RegularStruct {
     RegularStruct {
@@ -43,7 +43,7 @@ pub fn change_field_value_regular_struct() -> RegularStruct {
 
 
 
-// Change field order (regular struct) -----------------------------------------
+// Change field order (regular struct)
 #[cfg(cfail1)]
 pub fn change_field_order_regular_struct() -> RegularStruct {
     RegularStruct {
@@ -66,7 +66,7 @@ pub fn change_field_order_regular_struct() -> RegularStruct {
 
 
 
-// Add field (regular struct) --------------------------------------------------
+// Add field (regular struct)
 #[cfg(cfail1)]
 pub fn add_field_regular_struct() -> RegularStruct {
     let struct1 = RegularStruct {
@@ -100,7 +100,7 @@ pub fn add_field_regular_struct() -> RegularStruct {
 
 
 
-// Change field label (regular struct) -----------------------------------------
+// Change field label (regular struct)
 #[cfg(cfail1)]
 pub fn change_field_label_regular_struct() -> RegularStruct {
     let struct1 = RegularStruct {
@@ -141,7 +141,7 @@ pub struct RegularStruct2 {
     z: i8,
 }
 
-// Change constructor path (regular struct) ------------------------------------
+// Change constructor path (regular struct)
 #[cfg(cfail1)]
 pub fn change_constructor_path_regular_struct() {
     let _ = RegularStruct {
@@ -164,7 +164,7 @@ pub fn change_constructor_path_regular_struct() {
 
 
 
-// Change constructor path indirectly (regular struct) -------------------------
+// Change constructor path indirectly (regular struct)
 pub mod change_constructor_path_indirectly_regular_struct {
     #[cfg(cfail1)]
     use super::RegularStruct as Struct;
@@ -189,7 +189,7 @@ pub mod change_constructor_path_indirectly_regular_struct {
 
 pub struct TupleStruct(i32, i64, i16);
 
-// Change field value (tuple struct) -------------------------------------------
+// Change field value (tuple struct)
 #[cfg(cfail1)]
 pub fn change_field_value_tuple_struct() -> TupleStruct {
     TupleStruct(0, 1, 2)
@@ -206,7 +206,7 @@ pub fn change_field_value_tuple_struct() -> TupleStruct {
 
 pub struct TupleStruct2(u16, u16, u16);
 
-// Change constructor path (tuple struct) --------------------------------------
+// Change constructor path (tuple struct)
 #[cfg(cfail1)]
 pub fn change_constructor_path_tuple_struct() {
     let _ = TupleStruct(0, 1, 2);
@@ -221,7 +221,7 @@ pub fn change_constructor_path_tuple_struct() {
 
 
 
-// Change constructor path indirectly (tuple struct) ---------------------------
+// Change constructor path indirectly (tuple struct)
 pub mod change_constructor_path_indirectly_tuple_struct {
     #[cfg(cfail1)]
     use super::TupleStruct as Struct;
diff --git a/src/test/incremental/hashes/trait_defs.rs b/src/test/incremental/hashes/trait_defs.rs
index 30b4e306820..81ff99533fc 100644
--- a/src/test/incremental/hashes/trait_defs.rs
+++ b/src/test/incremental/hashes/trait_defs.rs
@@ -21,7 +21,7 @@
 #![feature(intrinsics)]
 
 
-// Change trait visibility --------------------------------------------------------
+// Change trait visibility
 #[cfg(cfail1)]
 trait TraitVisibility { }
 
@@ -32,7 +32,7 @@ pub trait TraitVisibility { }
 
 
 
-// Change trait unsafety ----------------------------------------------------------
+// Change trait unsafety
 #[cfg(cfail1)]
 trait TraitUnsafety { }
 
@@ -43,7 +43,7 @@ unsafe trait TraitUnsafety { }
 
 
 
-// Add method ---------------------------------------------------------------------
+// Add method
 #[cfg(cfail1)]
 trait TraitAddMethod {
 }
@@ -57,7 +57,7 @@ pub trait TraitAddMethod {
 
 
 
-// Change name of method ----------------------------------------------------------
+// Change name of method
 #[cfg(cfail1)]
 trait TraitChangeMethodName {
     fn method();
@@ -72,7 +72,7 @@ trait TraitChangeMethodName {
 
 
 
-// Add return type to method ------------------------------------------------------
+// Add return type to method
 #[cfg(cfail1)]
 trait TraitAddReturnType {
     fn method();
@@ -89,7 +89,7 @@ trait TraitAddReturnType {
 
 
 
-// Change return type of method ---------------------------------------------------
+// Change return type of method
 #[cfg(cfail1)]
 trait TraitChangeReturnType {
     fn method() -> u32;
@@ -106,7 +106,7 @@ trait TraitChangeReturnType {
 
 
 
-// Add parameter to method --------------------------------------------------------
+// Add parameter to method
 #[cfg(cfail1)]
 trait TraitAddParameterToMethod {
     fn method();
@@ -123,7 +123,7 @@ trait TraitAddParameterToMethod {
 
 
 
-// Change name of method parameter ------------------------------------------------
+// Change name of method parameter
 #[cfg(cfail1)]
 trait TraitChangeMethodParameterName {
     fn method(a: u32);
@@ -148,7 +148,7 @@ trait TraitChangeMethodParameterName {
 
 
 
-// Change type of method parameter (i32 => i64) -----------------------------------
+// Change type of method parameter (i32 => i64)
 #[cfg(cfail1)]
 trait TraitChangeMethodParameterType {
     fn method(a: i32);
@@ -165,7 +165,7 @@ trait TraitChangeMethodParameterType {
 
 
 
-// Change type of method parameter (&i32 => &mut i32) -----------------------------
+// Change type of method parameter (&i32 => &mut i32)
 #[cfg(cfail1)]
 trait TraitChangeMethodParameterTypeRef {
     fn method(a: &i32);
@@ -182,7 +182,7 @@ trait TraitChangeMethodParameterTypeRef {
 
 
 
-// Change order of method parameters ----------------------------------------------
+// Change order of method parameters
 #[cfg(cfail1)]
 trait TraitChangeMethodParametersOrder {
     fn method(a: i32, b: i64);
@@ -199,7 +199,7 @@ trait TraitChangeMethodParametersOrder {
 
 
 
-// Add default implementation to method -------------------------------------------
+// Add default implementation to method
 #[cfg(cfail1)]
 trait TraitAddMethodAutoImplementation {
     fn method();
@@ -216,7 +216,7 @@ trait TraitAddMethodAutoImplementation {
 
 
 
-// Change order of methods --------------------------------------------------------
+// Change order of methods
 #[cfg(cfail1)]
 trait TraitChangeOrderOfMethods {
     fn method0();
@@ -233,7 +233,7 @@ trait TraitChangeOrderOfMethods {
 
 
 
-// Change mode of self parameter --------------------------------------------------
+// Change mode of self parameter
 #[cfg(cfail1)]
 trait TraitChangeModeSelfRefToMut {
     fn method(&self);
@@ -284,7 +284,7 @@ trait TraitChangeModeSelfOwnToRef {
 
 
 
-// Add unsafe modifier to method --------------------------------------------------
+// Add unsafe modifier to method
 #[cfg(cfail1)]
 trait TraitAddUnsafeModifier {
     fn method();
@@ -301,7 +301,7 @@ trait TraitAddUnsafeModifier {
 
 
 
-// Add extern modifier to method --------------------------------------------------
+// Add extern modifier to method
 #[cfg(cfail1)]
 trait TraitAddExternModifier {
     fn method();
@@ -318,7 +318,7 @@ trait TraitAddExternModifier {
 
 
 
-// Change extern "C" to extern "rust-intrinsic" -----------------------------------
+// Change extern "C" to extern "rust-intrinsic"
 #[cfg(cfail1)]
 trait TraitChangeExternCToRustIntrinsic {
     extern "C" fn method();
@@ -335,7 +335,7 @@ trait TraitChangeExternCToRustIntrinsic {
 
 
 
-// Add type parameter to method ---------------------------------------------------
+// Add type parameter to method
 #[cfg(cfail1)]
 trait TraitAddTypeParameterToMethod {
     fn method();
@@ -352,7 +352,7 @@ trait TraitAddTypeParameterToMethod {
 
 
 
-// Add lifetime parameter to method -----------------------------------------------
+// Add lifetime parameter to method
 #[cfg(cfail1)]
 trait TraitAddLifetimeParameterToMethod {
     fn method();
@@ -373,7 +373,7 @@ trait TraitAddLifetimeParameterToMethod {
 trait ReferencedTrait0 { }
 trait ReferencedTrait1 { }
 
-// Add trait bound to method type parameter ---------------------------------------
+// Add trait bound to method type parameter
 #[cfg(cfail1)]
 trait TraitAddTraitBoundToMethodTypeParameter {
     fn method<T>();
@@ -390,7 +390,7 @@ trait TraitAddTraitBoundToMethodTypeParameter {
 
 
 
-// Add builtin bound to method type parameter -------------------------------------
+// Add builtin bound to method type parameter
 #[cfg(cfail1)]
 trait TraitAddBuiltinBoundToMethodTypeParameter {
     fn method<T>();
@@ -407,7 +407,7 @@ trait TraitAddBuiltinBoundToMethodTypeParameter {
 
 
 
-// Add lifetime bound to method lifetime parameter ------------------------------------
+// Add lifetime bound to method lifetime parameter
 #[cfg(cfail1)]
 trait TraitAddLifetimeBoundToMethodLifetimeParameter {
     fn method<'a, 'b>(a: &'a u32, b: &'b u32);
@@ -424,7 +424,7 @@ trait TraitAddLifetimeBoundToMethodLifetimeParameter {
 
 
 
-// Add second trait bound to method type parameter --------------------------------
+// Add second trait bound to method type parameter
 #[cfg(cfail1)]
 trait TraitAddSecondTraitBoundToMethodTypeParameter {
     fn method<T: ReferencedTrait0>();
@@ -441,7 +441,7 @@ trait TraitAddSecondTraitBoundToMethodTypeParameter {
 
 
 
-// Add second builtin bound to method type parameter ------------------------------
+// Add second builtin bound to method type parameter
 #[cfg(cfail1)]
 trait TraitAddSecondBuiltinBoundToMethodTypeParameter {
     fn method<T: Sized>();
@@ -458,7 +458,7 @@ trait TraitAddSecondBuiltinBoundToMethodTypeParameter {
 
 
 
-// Add second lifetime bound to method lifetime parameter -----------------------------
+// Add second lifetime bound to method lifetime parameter
 #[cfg(cfail1)]
 trait TraitAddSecondLifetimeBoundToMethodLifetimeParameter {
     fn method<'a, 'b, 'c: 'a>(a: &'a u32, b: &'b u32, c: &'c u32);
@@ -475,7 +475,7 @@ trait TraitAddSecondLifetimeBoundToMethodLifetimeParameter {
 
 
 
-// Add associated type ------------------------------------------------------------
+// Add associated type
 #[cfg(cfail1)]
 trait TraitAddAssociatedType {
 
@@ -495,7 +495,7 @@ trait TraitAddAssociatedType {
 
 
 
-// Add trait bound to associated type ---------------------------------------------
+// Add trait bound to associated type
 #[cfg(cfail1)]
 trait TraitAddTraitBoundToAssociatedType {
     type Associated;
@@ -519,7 +519,7 @@ trait TraitAddTraitBoundToAssociatedType {
 
 
 
-// Add lifetime bound to associated type ------------------------------------------
+// Add lifetime bound to associated type
 #[cfg(cfail1)]
 trait TraitAddLifetimeBoundToAssociatedType<'a> {
     type Associated;
@@ -540,7 +540,7 @@ trait TraitAddLifetimeBoundToAssociatedType<'a> {
 
 
 
-// Add default to associated type -------------------------------------------------
+// Add default to associated type
 #[cfg(cfail1)]
 trait TraitAddDefaultToAssociatedType {
     type Associated;
@@ -561,7 +561,7 @@ trait TraitAddDefaultToAssociatedType {
 
 
 
-// Add associated constant --------------------------------------------------------
+// Add associated constant
 #[cfg(cfail1)]
 trait TraitAddAssociatedConstant {
     fn method();
@@ -578,7 +578,7 @@ trait TraitAddAssociatedConstant {
 
 
 
-// Add initializer to associated constant -----------------------------------------
+// Add initializer to associated constant
 #[cfg(cfail1)]
 trait TraitAddInitializerToAssociatedConstant {
     const Value: u32;
@@ -601,7 +601,7 @@ trait TraitAddInitializerToAssociatedConstant {
 
 
 
-// Change type of associated constant ---------------------------------------------
+// Change type of associated constant
 #[cfg(cfail1)]
 trait TraitChangeTypeOfAssociatedConstant {
     const Value: u32;
@@ -624,7 +624,7 @@ trait TraitChangeTypeOfAssociatedConstant {
 
 
 
-// Add super trait ----------------------------------------------------------------
+// Add super trait
 #[cfg(cfail1)]
 trait TraitAddSuperTrait { }
 
@@ -635,7 +635,7 @@ trait TraitAddSuperTrait : ReferencedTrait0 { }
 
 
 
-// Add builtin bound (Send or Copy) -----------------------------------------------
+// Add builtin bound (Send or Copy)
 #[cfg(cfail1)]
 trait TraitAddBuiltiBound { }
 
@@ -646,7 +646,7 @@ trait TraitAddBuiltiBound : Send { }
 
 
 
-// Add 'static lifetime bound to trait --------------------------------------------
+// Add 'static lifetime bound to trait
 #[cfg(cfail1)]
 trait TraitAddStaticLifetimeBound { }
 
@@ -657,7 +657,7 @@ trait TraitAddStaticLifetimeBound : 'static { }
 
 
 
-// Add super trait as second bound ------------------------------------------------
+// Add super trait as second bound
 #[cfg(cfail1)]
 trait TraitAddTraitAsSecondBound : ReferencedTrait0 { }
 
@@ -676,7 +676,7 @@ trait TraitAddTraitAsSecondBoundFromBuiltin : Send + ReferencedTrait0 { }
 
 
 
-// Add builtin bound as second bound ----------------------------------------------
+// Add builtin bound as second bound
 #[cfg(cfail1)]
 trait TraitAddBuiltinBoundAsSecondBound : ReferencedTrait0 { }
 
@@ -695,7 +695,7 @@ trait TraitAddBuiltinBoundAsSecondBoundFromBuiltin: Send + Copy { }
 
 
 
-// Add 'static bounds as second bound ---------------------------------------------
+// Add 'static bounds as second bound
 #[cfg(cfail1)]
 trait TraitAddStaticBoundAsSecondBound : ReferencedTrait0 { }
 
@@ -714,7 +714,7 @@ trait TraitAddStaticBoundAsSecondBoundFromBuiltin : Send + 'static { }
 
 
 
-// Add type parameter to trait ----------------------------------------------------
+// Add type parameter to trait
 #[cfg(cfail1)]
 trait TraitAddTypeParameterToTrait { }
 
@@ -725,7 +725,7 @@ trait TraitAddTypeParameterToTrait<T> { }
 
 
 
-// Add lifetime parameter to trait ------------------------------------------------
+// Add lifetime parameter to trait
 #[cfg(cfail1)]
 trait TraitAddLifetimeParameterToTrait { }
 
@@ -736,7 +736,7 @@ trait TraitAddLifetimeParameterToTrait<'a> { }
 
 
 
-// Add trait bound to type parameter of trait -------------------------------------
+// Add trait bound to type parameter of trait
 #[cfg(cfail1)]
 trait TraitAddTraitBoundToTypeParameterOfTrait<T> { }
 
@@ -747,7 +747,7 @@ trait TraitAddTraitBoundToTypeParameterOfTrait<T: ReferencedTrait0> { }
 
 
 
-// Add lifetime bound to type parameter of trait ----------------------------------
+// Add lifetime bound to type parameter of trait
 #[cfg(cfail1)]
 trait TraitAddLifetimeBoundToTypeParameterOfTrait<'a, T> { }
 
@@ -758,7 +758,7 @@ trait TraitAddLifetimeBoundToTypeParameterOfTrait<'a, T: 'a> { }
 
 
 
-// Add lifetime bound to lifetime parameter of trait ------------------------------
+// Add lifetime bound to lifetime parameter of trait
 #[cfg(cfail1)]
 trait TraitAddLifetimeBoundToLifetimeParameterOfTrait<'a, 'b> { }
 
@@ -769,7 +769,7 @@ trait TraitAddLifetimeBoundToLifetimeParameterOfTrait<'a: 'b, 'b> { }
 
 
 
-// Add builtin bound to type parameter of trait -----------------------------------
+// Add builtin bound to type parameter of trait
 #[cfg(cfail1)]
 trait TraitAddBuiltinBoundToTypeParameterOfTrait<T> { }
 
@@ -780,7 +780,7 @@ trait TraitAddBuiltinBoundToTypeParameterOfTrait<T: Send> { }
 
 
 
-// Add second type parameter to trait ---------------------------------------------
+// Add second type parameter to trait
 #[cfg(cfail1)]
 trait TraitAddSecondTypeParameterToTrait<T> { }
 
@@ -791,7 +791,7 @@ trait TraitAddSecondTypeParameterToTrait<T, S> { }
 
 
 
-// Add second lifetime parameter to trait -----------------------------------------
+// Add second lifetime parameter to trait
 #[cfg(cfail1)]
 trait TraitAddSecondLifetimeParameterToTrait<'a> { }
 
@@ -802,7 +802,7 @@ trait TraitAddSecondLifetimeParameterToTrait<'a, 'b> { }
 
 
 
-// Add second trait bound to type parameter of trait ------------------------------
+// Add second trait bound to type parameter of trait
 #[cfg(cfail1)]
 trait TraitAddSecondTraitBoundToTypeParameterOfTrait<T: ReferencedTrait0> { }
 
@@ -813,7 +813,7 @@ trait TraitAddSecondTraitBoundToTypeParameterOfTrait<T: ReferencedTrait0 + Refer
 
 
 
-// Add second lifetime bound to type parameter of trait ---------------------------
+// Add second lifetime bound to type parameter of trait
 #[cfg(cfail1)]
 trait TraitAddSecondLifetimeBoundToTypeParameterOfTrait<'a, 'b, T: 'a> { }
 
@@ -824,7 +824,7 @@ trait TraitAddSecondLifetimeBoundToTypeParameterOfTrait<'a, 'b, T: 'a + 'b> { }
 
 
 
-// Add second lifetime bound to lifetime parameter of trait------------------------
+// Add second lifetime bound to lifetime parameter of trait
 #[cfg(cfail1)]
 trait TraitAddSecondLifetimeBoundToLifetimeParameterOfTrait<'a: 'b, 'b, 'c> { }
 
@@ -835,7 +835,7 @@ trait TraitAddSecondLifetimeBoundToLifetimeParameterOfTrait<'a: 'b + 'c, 'b, 'c>
 
 
 
-// Add second builtin bound to type parameter of trait ----------------------------
+// Add second builtin bound to type parameter of trait
 #[cfg(cfail1)]
 trait TraitAddSecondBuiltinBoundToTypeParameterOfTrait<T: Send> { }
 
@@ -846,13 +846,12 @@ trait TraitAddSecondBuiltinBoundToTypeParameterOfTrait<T: Send + Sync> { }
 
 
 
-// --------------------------------------------------------------------------------
 struct ReferenceType0 {}
 struct ReferenceType1 {}
 
 
 
-// Add trait bound to type parameter of trait in where clause----------------------
+// Add trait bound to type parameter of trait in where clause
 #[cfg(cfail1)]
 trait TraitAddTraitBoundToTypeParameterOfTraitWhere<T> { }
 
@@ -863,7 +862,7 @@ trait TraitAddTraitBoundToTypeParameterOfTraitWhere<T> where T: ReferencedTrait0
 
 
 
-// Add lifetime bound to type parameter of trait in where clause-------------------
+// Add lifetime bound to type parameter of trait in where clause
 #[cfg(cfail1)]
 trait TraitAddLifetimeBoundToTypeParameterOfTraitWhere<'a, T> { }
 
@@ -874,7 +873,7 @@ trait TraitAddLifetimeBoundToTypeParameterOfTraitWhere<'a, T> where T: 'a { }
 
 
 
-// Add lifetime bound to lifetime parameter of trait in where clause---------------
+// Add lifetime bound to lifetime parameter of trait in where clause
 #[cfg(cfail1)]
 trait TraitAddLifetimeBoundToLifetimeParameterOfTraitWhere<'a, 'b> { }
 
@@ -885,7 +884,7 @@ trait TraitAddLifetimeBoundToLifetimeParameterOfTraitWhere<'a, 'b> where 'a: 'b
 
 
 
-// Add builtin bound to type parameter of trait in where clause--------------------
+// Add builtin bound to type parameter of trait in where clause
 #[cfg(cfail1)]
 trait TraitAddBuiltinBoundToTypeParameterOfTraitWhere<T> { }
 
@@ -896,7 +895,7 @@ trait TraitAddBuiltinBoundToTypeParameterOfTraitWhere<T> where T: Send { }
 
 
 
-// Add second trait bound to type parameter of trait in where clause---------------
+// Add second trait bound to type parameter of trait in where clause
 #[cfg(cfail1)]
 trait TraitAddSecondTraitBoundToTypeParameterOfTraitWhere<T> where T: ReferencedTrait0 { }
 
@@ -908,7 +907,7 @@ trait TraitAddSecondTraitBoundToTypeParameterOfTraitWhere<T>
 
 
 
-// Add second lifetime bound to type parameter of trait in where clause------------
+// Add second lifetime bound to type parameter of trait in where clause
 #[cfg(cfail1)]
 trait TraitAddSecondLifetimeBoundToTypeParameterOfTraitWhere<'a, 'b, T> where T: 'a { }
 
@@ -919,7 +918,7 @@ trait TraitAddSecondLifetimeBoundToTypeParameterOfTraitWhere<'a, 'b, T> where T:
 
 
 
-// Add second lifetime bound to lifetime parameter of trait in where clause--------
+// Add second lifetime bound to lifetime parameter of trait in where clause
 #[cfg(cfail1)]
 trait TraitAddSecondLifetimeBoundToLifetimeParameterOfTraitWhere<'a, 'b, 'c> where 'a: 'b { }
 
@@ -930,7 +929,7 @@ trait TraitAddSecondLifetimeBoundToLifetimeParameterOfTraitWhere<'a, 'b, 'c> whe
 
 
 
-// Add second builtin bound to type parameter of trait in where clause-------------
+// Add second builtin bound to type parameter of trait in where clause
 #[cfg(cfail1)]
 trait TraitAddSecondBuiltinBoundToTypeParameterOfTraitWhere<T> where T: Send { }
 
@@ -940,7 +939,7 @@ trait TraitAddSecondBuiltinBoundToTypeParameterOfTraitWhere<T> where T: Send { }
 trait TraitAddSecondBuiltinBoundToTypeParameterOfTraitWhere<T> where T: Send + Sync { }
 
 
-// Change return type of method indirectly by modifying a use statement------------
+// Change return type of method indirectly by modifying a use statement
 mod change_return_type_of_method_indirectly_use {
     #[cfg(cfail1)]
     use super::ReferenceType0 as ReturnType;
@@ -958,7 +957,7 @@ mod change_return_type_of_method_indirectly_use {
 
 
 
-// Change type of method parameter indirectly by modifying a use statement---------
+// Change type of method parameter indirectly by modifying a use statement
 mod change_method_parameter_type_indirectly_by_use {
     #[cfg(cfail1)]
     use super::ReferenceType0 as ArgType;
diff --git a/src/test/incremental/hashes/while_let_loops.rs b/src/test/incremental/hashes/while_let_loops.rs
index 39b28ec1906..da3c957741f 100644
--- a/src/test/incremental/hashes/while_let_loops.rs
+++ b/src/test/incremental/hashes/while_let_loops.rs
@@ -14,7 +14,7 @@
 #![crate_type="rlib"]
 
 
-// Change loop body ------------------------------------------------------------
+// Change loop body
 #[cfg(cfail1)]
 pub fn change_loop_body() {
     let mut _x = 0;
@@ -37,7 +37,7 @@ pub fn change_loop_body() {
 
 
 
-// Change loop body ------------------------------------------------------------
+// Change loop body
 #[cfg(cfail1)]
 pub fn change_loop_condition() {
     let mut _x = 0;
@@ -60,7 +60,7 @@ pub fn change_loop_condition() {
 
 
 
-// Add break -------------------------------------------------------------------
+// Add break
 #[cfg(cfail1)]
 pub fn add_break() {
     let mut _x = 0;
@@ -82,7 +82,7 @@ pub fn add_break() {
 
 
 
-// Add loop label --------------------------------------------------------------
+// Add loop label
 #[cfg(cfail1)]
 pub fn add_loop_label() {
     let mut _x = 0;
@@ -105,7 +105,7 @@ pub fn add_loop_label() {
 
 
 
-// Add loop label to break -----------------------------------------------------
+// Add loop label to break
 #[cfg(cfail1)]
 pub fn add_loop_label_to_break() {
     let mut _x = 0;
@@ -128,7 +128,7 @@ pub fn add_loop_label_to_break() {
 
 
 
-// Change break label ----------------------------------------------------------
+// Change break label
 #[cfg(cfail1)]
 pub fn change_break_label() {
     let mut _x = 0;
@@ -155,7 +155,7 @@ pub fn change_break_label() {
 
 
 
-// Add loop label to continue --------------------------------------------------
+// Add loop label to continue
 #[cfg(cfail1)]
 pub fn add_loop_label_to_continue() {
     let mut _x = 0;
@@ -178,7 +178,7 @@ pub fn add_loop_label_to_continue() {
 
 
 
-// Change continue label ----------------------------------------------------------
+// Change continue label
 #[cfg(cfail1)]
 pub fn change_continue_label() {
     let mut _x = 0;
@@ -205,7 +205,7 @@ pub fn change_continue_label() {
 
 
 
-// Change continue to break ----------------------------------------------------
+// Change continue to break
 #[cfg(cfail1)]
 pub fn change_continue_to_break() {
     let mut _x = 0;
diff --git a/src/test/incremental/hashes/while_loops.rs b/src/test/incremental/hashes/while_loops.rs
index 06072185469..3be42e7a4ee 100644
--- a/src/test/incremental/hashes/while_loops.rs
+++ b/src/test/incremental/hashes/while_loops.rs
@@ -14,7 +14,7 @@
 #![crate_type="rlib"]
 
 
-// Change loop body ------------------------------------------------------------
+// Change loop body
 #[cfg(cfail1)]
 pub fn change_loop_body() {
     let mut _x = 0;
@@ -37,7 +37,7 @@ pub fn change_loop_body() {
 
 
 
-// Change loop body ------------------------------------------------------------
+// Change loop body
 #[cfg(cfail1)]
 pub fn change_loop_condition() {
     let mut _x = 0;
@@ -60,7 +60,7 @@ pub fn change_loop_condition() {
 
 
 
-// Add break -------------------------------------------------------------------
+// Add break
 #[cfg(cfail1)]
 pub fn add_break() {
     let mut _x = 0;
@@ -82,7 +82,7 @@ pub fn add_break() {
 
 
 
-// Add loop label --------------------------------------------------------------
+// Add loop label
 #[cfg(cfail1)]
 pub fn add_loop_label() {
     let mut _x = 0;
@@ -105,7 +105,7 @@ pub fn add_loop_label() {
 
 
 
-// Add loop label to break -----------------------------------------------------
+// Add loop label to break
 #[cfg(cfail1)]
 pub fn add_loop_label_to_break() {
     let mut _x = 0;
@@ -128,7 +128,7 @@ pub fn add_loop_label_to_break() {
 
 
 
-// Change break label ----------------------------------------------------------
+// Change break label
 #[cfg(cfail1)]
 pub fn change_break_label() {
     let mut _x = 0;
@@ -155,7 +155,7 @@ pub fn change_break_label() {
 
 
 
-// Add loop label to continue --------------------------------------------------
+// Add loop label to continue
 #[cfg(cfail1)]
 pub fn add_loop_label_to_continue() {
     let mut _x = 0;
@@ -178,7 +178,7 @@ pub fn add_loop_label_to_continue() {
 
 
 
-// Change continue label ----------------------------------------------------------
+// Change continue label
 #[cfg(cfail1)]
 pub fn change_continue_label() {
     let mut _x = 0;
@@ -205,7 +205,7 @@ pub fn change_continue_label() {
 
 
 
-// Change continue to break ----------------------------------------------------
+// Change continue to break
 #[cfg(cfail1)]
 pub fn change_continue_to_break() {
     let mut _x = 0;
diff --git a/src/test/rustdoc/async-fn.rs b/src/test/rustdoc/async-fn.rs
index 7384f7027d1..5f9708a3972 100644
--- a/src/test/rustdoc/async-fn.rs
+++ b/src/test/rustdoc/async-fn.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 // @has async_fn/fn.foo.html '//pre[@class="rust fn"]' 'pub async fn foo() -> Option<Foo>'
 pub async fn foo() -> Option<Foo> {
     None
diff --git a/src/test/rustdoc/async-move-doctest.rs b/src/test/rustdoc/async-move-doctest.rs
index 42723132782..2ba61388c9e 100644
--- a/src/test/rustdoc/async-move-doctest.rs
+++ b/src/test/rustdoc/async-move-doctest.rs
@@ -1,13 +1,11 @@
 // compile-flags:--test
 // edition:2018
 
-// prior to setting the default edition for the doctest pre-parser, this doctest would fail due to
-// a fatal parsing error
+// Prior to setting the default edition for the doctest pre-parser,
+// this doctest would fail due to a fatal parsing error.
 // see https://github.com/rust-lang/rust/issues/59313
 
 //! ```
-//! #![feature(async_await)]
-//!
 //! fn foo() {
 //!     drop(async move {});
 //! }
diff --git a/src/test/rustdoc/edition-flag.rs b/src/test/rustdoc/edition-flag.rs
index 5571245f28d..ddbc2be651d 100644
--- a/src/test/rustdoc/edition-flag.rs
+++ b/src/test/rustdoc/edition-flag.rs
@@ -1,10 +1,7 @@
 // compile-flags:--test -Z unstable-options
 // edition:2018
 
-#![feature(async_await)]
-
 /// ```rust
-/// #![feature(async_await)]
 /// fn main() {
 ///     let _ = async { };
 /// }
diff --git a/src/test/ui/async-await/argument-patterns.rs b/src/test/ui/async-await/argument-patterns.rs
index 3750c2bcb70..0e42f48b835 100644
--- a/src/test/ui/async-await/argument-patterns.rs
+++ b/src/test/ui/async-await/argument-patterns.rs
@@ -3,7 +3,6 @@
 
 #![allow(unused_variables)]
 #![deny(unused_mut)]
-#![feature(async_await)]
 
 type A = Vec<u32>;
 
diff --git a/src/test/ui/async-await/async-await.rs b/src/test/ui/async-await/async-await.rs
index 8a15eb8c573..bf8bf0bcce0 100644
--- a/src/test/ui/async-await/async-await.rs
+++ b/src/test/ui/async-await/async-await.rs
@@ -3,8 +3,6 @@
 // edition:2018
 // aux-build:arc_wake.rs
 
-#![feature(async_await)]
-
 extern crate arc_wake;
 
 use std::pin::Pin;
diff --git a/src/test/ui/async-await/async-block-control-flow-static-semantics.rs b/src/test/ui/async-await/async-block-control-flow-static-semantics.rs
index 4ddcdcac822..90d75118f8e 100644
--- a/src/test/ui/async-await/async-block-control-flow-static-semantics.rs
+++ b/src/test/ui/async-await/async-block-control-flow-static-semantics.rs
@@ -6,8 +6,6 @@
 // edition:2018
 // ignore-tidy-linelength
 
-#![feature(async_await)]
-
 fn main() {}
 
 use core::future::Future;
diff --git a/src/test/ui/async-await/async-block-control-flow-static-semantics.stderr b/src/test/ui/async-await/async-block-control-flow-static-semantics.stderr
index a0a5ac63d84..bc42a46ae10 100644
--- a/src/test/ui/async-await/async-block-control-flow-static-semantics.stderr
+++ b/src/test/ui/async-await/async-block-control-flow-static-semantics.stderr
@@ -1,17 +1,17 @@
 error[E0267]: `break` inside of an async block
-  --> $DIR/async-block-control-flow-static-semantics.rs:35:9
+  --> $DIR/async-block-control-flow-static-semantics.rs:33:9
    |
 LL |         break 0u8;
    |         ^^^^^^^^^ cannot break inside of an async block
 
 error[E0267]: `break` inside of an async block
-  --> $DIR/async-block-control-flow-static-semantics.rs:42:13
+  --> $DIR/async-block-control-flow-static-semantics.rs:40:13
    |
 LL |             break 0u8;
    |             ^^^^^^^^^ cannot break inside of an async block
 
 error[E0308]: mismatched types
-  --> $DIR/async-block-control-flow-static-semantics.rs:15:43
+  --> $DIR/async-block-control-flow-static-semantics.rs:13:43
    |
 LL | fn return_targets_async_block_not_fn() -> u8 {
    |    ---------------------------------      ^^ expected u8, found ()
@@ -22,7 +22,7 @@ LL | fn return_targets_async_block_not_fn() -> u8 {
               found type `()`
 
 error[E0271]: type mismatch resolving `<impl std::future::Future as std::future::Future>::Output == ()`
-  --> $DIR/async-block-control-flow-static-semantics.rs:20:39
+  --> $DIR/async-block-control-flow-static-semantics.rs:18:39
    |
 LL |     let _: &dyn Future<Output = ()> = &block;
    |                                       ^^^^^^ expected u8, found ()
@@ -32,7 +32,7 @@ LL |     let _: &dyn Future<Output = ()> = &block;
    = note: required for the cast to the object type `dyn std::future::Future<Output = ()>`
 
 error[E0271]: type mismatch resolving `<impl std::future::Future as std::future::Future>::Output == ()`
-  --> $DIR/async-block-control-flow-static-semantics.rs:29:39
+  --> $DIR/async-block-control-flow-static-semantics.rs:27:39
    |
 LL |     let _: &dyn Future<Output = ()> = &block;
    |                                       ^^^^^^ expected u8, found ()
@@ -42,7 +42,7 @@ LL |     let _: &dyn Future<Output = ()> = &block;
    = note: required for the cast to the object type `dyn std::future::Future<Output = ()>`
 
 error[E0271]: type mismatch resolving `<impl std::future::Future as std::future::Future>::Output == u8`
-  --> $DIR/async-block-control-flow-static-semantics.rs:24:55
+  --> $DIR/async-block-control-flow-static-semantics.rs:22:55
    |
 LL | async fn return_targets_async_block_not_async_fn() -> u8 {
    |                                                       ^^ expected (), found u8
@@ -52,7 +52,7 @@ LL | async fn return_targets_async_block_not_async_fn() -> u8 {
    = note: the return type of a function must have a statically known size
 
 error[E0308]: mismatched types
-  --> $DIR/async-block-control-flow-static-semantics.rs:50:44
+  --> $DIR/async-block-control-flow-static-semantics.rs:48:44
    |
 LL | fn rethrow_targets_async_block_not_fn() -> Result<u8, MyErr> {
    |    ----------------------------------      ^^^^^^^^^^^^^^^^^ expected enum `std::result::Result`, found ()
@@ -63,7 +63,7 @@ LL | fn rethrow_targets_async_block_not_fn() -> Result<u8, MyErr> {
               found type `()`
 
 error[E0308]: mismatched types
-  --> $DIR/async-block-control-flow-static-semantics.rs:59:50
+  --> $DIR/async-block-control-flow-static-semantics.rs:57:50
    |
 LL | fn rethrow_targets_async_block_not_async_fn() -> Result<u8, MyErr> {
    |    ----------------------------------------      ^^^^^^^^^^^^^^^^^ expected enum `std::result::Result`, found ()
diff --git a/src/test/ui/async-await/async-closure-matches-expr.rs b/src/test/ui/async-await/async-closure-matches-expr.rs
index 1c192a4d1d8..d82fbcdc550 100644
--- a/src/test/ui/async-await/async-closure-matches-expr.rs
+++ b/src/test/ui/async-await/async-closure-matches-expr.rs
@@ -1,7 +1,7 @@
 // build-pass
 // edition:2018
 
-#![feature(async_await, async_closure)]
+#![feature(async_closure)]
 
 macro_rules! match_expr {
     ($x:expr) => {}
diff --git a/src/test/ui/async-await/async-closure.rs b/src/test/ui/async-await/async-closure.rs
index 925b54b3985..9a24bd8c954 100644
--- a/src/test/ui/async-await/async-closure.rs
+++ b/src/test/ui/async-await/async-closure.rs
@@ -3,7 +3,7 @@
 // edition:2018
 // aux-build:arc_wake.rs
 
-#![feature(async_await, async_closure)]
+#![feature(async_closure)]
 
 extern crate arc_wake;
 
diff --git a/src/test/ui/async-await/async-error-span.rs b/src/test/ui/async-await/async-error-span.rs
index d362348a3fd..dec3ac0f685 100644
--- a/src/test/ui/async-await/async-error-span.rs
+++ b/src/test/ui/async-await/async-error-span.rs
@@ -1,7 +1,6 @@
 // edition:2018
-#![feature(async_await)]
 
-// Regression test for issue #62382
+// Regression test for issue #62382.
 
 use std::future::Future;
 
diff --git a/src/test/ui/async-await/async-error-span.stderr b/src/test/ui/async-await/async-error-span.stderr
index bd8966b9c7d..47441f5e4ef 100644
--- a/src/test/ui/async-await/async-error-span.stderr
+++ b/src/test/ui/async-await/async-error-span.stderr
@@ -1,11 +1,11 @@
 error[E0698]: type inside `async` object must be known in this context
-  --> $DIR/async-error-span.rs:13:9
+  --> $DIR/async-error-span.rs:12:9
    |
 LL |     let a;
    |         ^ cannot infer type
    |
 note: the type is part of the `async` object because of this `await`
-  --> $DIR/async-error-span.rs:14:5
+  --> $DIR/async-error-span.rs:13:5
    |
 LL |     get_future().await;
    |     ^^^^^^^^^^^^^^^^^^
diff --git a/src/test/ui/async-await/async-fn-elided-impl-lifetime-parameter.rs b/src/test/ui/async-await/async-fn-elided-impl-lifetime-parameter.rs
index 1cbc5133a07..1c369fd7415 100644
--- a/src/test/ui/async-await/async-fn-elided-impl-lifetime-parameter.rs
+++ b/src/test/ui/async-await/async-fn-elided-impl-lifetime-parameter.rs
@@ -6,8 +6,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 struct Foo<'a>(&'a u8);
 
 impl Foo<'_> {
diff --git a/src/test/ui/async-await/async-fn-nonsend.rs b/src/test/ui/async-await/async-fn-nonsend.rs
index 612c1e29d82..1f1bf4250ea 100644
--- a/src/test/ui/async-await/async-fn-nonsend.rs
+++ b/src/test/ui/async-await/async-fn-nonsend.rs
@@ -2,8 +2,6 @@
 // edition:2018
 // compile-flags: --crate-type lib
 
-#![feature(async_await)]
-
 use std::{
     cell::RefCell,
     fmt::Debug,
diff --git a/src/test/ui/async-await/async-fn-nonsend.stderr b/src/test/ui/async-await/async-fn-nonsend.stderr
index 7776a36a28f..6b4fff2dc68 100644
--- a/src/test/ui/async-await/async-fn-nonsend.stderr
+++ b/src/test/ui/async-await/async-fn-nonsend.stderr
@@ -1,5 +1,5 @@
 error[E0277]: `std::rc::Rc<()>` cannot be sent between threads safely
-  --> $DIR/async-fn-nonsend.rs:52:5
+  --> $DIR/async-fn-nonsend.rs:50:5
    |
 LL |     assert_send(local_dropped_before_await());
    |     ^^^^^^^^^^^ `std::rc::Rc<()>` cannot be sent between threads safely
@@ -7,18 +7,18 @@ LL |     assert_send(local_dropped_before_await());
    = help: within `impl std::future::Future`, the trait `std::marker::Send` is not implemented for `std::rc::Rc<()>`
    = note: required because it appears within the type `impl std::fmt::Debug`
    = note: required because it appears within the type `{impl std::fmt::Debug, impl std::future::Future, ()}`
-   = note: required because it appears within the type `[static generator@$DIR/async-fn-nonsend.rs:23:39: 28:2 {impl std::fmt::Debug, impl std::future::Future, ()}]`
-   = note: required because it appears within the type `std::future::GenFuture<[static generator@$DIR/async-fn-nonsend.rs:23:39: 28:2 {impl std::fmt::Debug, impl std::future::Future, ()}]>`
+   = note: required because it appears within the type `[static generator@$DIR/async-fn-nonsend.rs:21:39: 26:2 {impl std::fmt::Debug, impl std::future::Future, ()}]`
+   = note: required because it appears within the type `std::future::GenFuture<[static generator@$DIR/async-fn-nonsend.rs:21:39: 26:2 {impl std::fmt::Debug, impl std::future::Future, ()}]>`
    = note: required because it appears within the type `impl std::future::Future`
    = note: required because it appears within the type `impl std::future::Future`
 note: required by `assert_send`
-  --> $DIR/async-fn-nonsend.rs:49:1
+  --> $DIR/async-fn-nonsend.rs:47:1
    |
 LL | fn assert_send(_: impl Send) {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0277]: `std::rc::Rc<()>` cannot be sent between threads safely
-  --> $DIR/async-fn-nonsend.rs:54:5
+  --> $DIR/async-fn-nonsend.rs:52:5
    |
 LL |     assert_send(non_send_temporary_in_match());
    |     ^^^^^^^^^^^ `std::rc::Rc<()>` cannot be sent between threads safely
@@ -26,18 +26,18 @@ LL |     assert_send(non_send_temporary_in_match());
    = help: within `impl std::future::Future`, the trait `std::marker::Send` is not implemented for `std::rc::Rc<()>`
    = note: required because it appears within the type `impl std::fmt::Debug`
    = note: required because it appears within the type `{fn(impl std::fmt::Debug) -> std::option::Option<impl std::fmt::Debug> {std::option::Option::<impl std::fmt::Debug>::Some}, fn() -> impl std::fmt::Debug {non_send}, impl std::fmt::Debug, std::option::Option<impl std::fmt::Debug>, impl std::future::Future, ()}`
-   = note: required because it appears within the type `[static generator@$DIR/async-fn-nonsend.rs:30:40: 39:2 {fn(impl std::fmt::Debug) -> std::option::Option<impl std::fmt::Debug> {std::option::Option::<impl std::fmt::Debug>::Some}, fn() -> impl std::fmt::Debug {non_send}, impl std::fmt::Debug, std::option::Option<impl std::fmt::Debug>, impl std::future::Future, ()}]`
-   = note: required because it appears within the type `std::future::GenFuture<[static generator@$DIR/async-fn-nonsend.rs:30:40: 39:2 {fn(impl std::fmt::Debug) -> std::option::Option<impl std::fmt::Debug> {std::option::Option::<impl std::fmt::Debug>::Some}, fn() -> impl std::fmt::Debug {non_send}, impl std::fmt::Debug, std::option::Option<impl std::fmt::Debug>, impl std::future::Future, ()}]>`
+   = note: required because it appears within the type `[static generator@$DIR/async-fn-nonsend.rs:28:40: 37:2 {fn(impl std::fmt::Debug) -> std::option::Option<impl std::fmt::Debug> {std::option::Option::<impl std::fmt::Debug>::Some}, fn() -> impl std::fmt::Debug {non_send}, impl std::fmt::Debug, std::option::Option<impl std::fmt::Debug>, impl std::future::Future, ()}]`
+   = note: required because it appears within the type `std::future::GenFuture<[static generator@$DIR/async-fn-nonsend.rs:28:40: 37:2 {fn(impl std::fmt::Debug) -> std::option::Option<impl std::fmt::Debug> {std::option::Option::<impl std::fmt::Debug>::Some}, fn() -> impl std::fmt::Debug {non_send}, impl std::fmt::Debug, std::option::Option<impl std::fmt::Debug>, impl std::future::Future, ()}]>`
    = note: required because it appears within the type `impl std::future::Future`
    = note: required because it appears within the type `impl std::future::Future`
 note: required by `assert_send`
-  --> $DIR/async-fn-nonsend.rs:49:1
+  --> $DIR/async-fn-nonsend.rs:47:1
    |
 LL | fn assert_send(_: impl Send) {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0277]: `dyn std::fmt::Write` cannot be sent between threads safely
-  --> $DIR/async-fn-nonsend.rs:56:5
+  --> $DIR/async-fn-nonsend.rs:54:5
    |
 LL |     assert_send(non_sync_with_method_call());
    |     ^^^^^^^^^^^ `dyn std::fmt::Write` cannot be sent between threads safely
@@ -47,18 +47,18 @@ LL |     assert_send(non_sync_with_method_call());
    = note: required because it appears within the type `std::fmt::Formatter<'_>`
    = note: required because of the requirements on the impl of `std::marker::Send` for `&mut std::fmt::Formatter<'_>`
    = note: required because it appears within the type `for<'r, 's> {&'r mut std::fmt::Formatter<'s>, bool, impl std::future::Future, ()}`
-   = note: required because it appears within the type `[static generator@$DIR/async-fn-nonsend.rs:41:38: 47:2 for<'r, 's> {&'r mut std::fmt::Formatter<'s>, bool, impl std::future::Future, ()}]`
-   = note: required because it appears within the type `std::future::GenFuture<[static generator@$DIR/async-fn-nonsend.rs:41:38: 47:2 for<'r, 's> {&'r mut std::fmt::Formatter<'s>, bool, impl std::future::Future, ()}]>`
+   = note: required because it appears within the type `[static generator@$DIR/async-fn-nonsend.rs:39:38: 45:2 for<'r, 's> {&'r mut std::fmt::Formatter<'s>, bool, impl std::future::Future, ()}]`
+   = note: required because it appears within the type `std::future::GenFuture<[static generator@$DIR/async-fn-nonsend.rs:39:38: 45:2 for<'r, 's> {&'r mut std::fmt::Formatter<'s>, bool, impl std::future::Future, ()}]>`
    = note: required because it appears within the type `impl std::future::Future`
    = note: required because it appears within the type `impl std::future::Future`
 note: required by `assert_send`
-  --> $DIR/async-fn-nonsend.rs:49:1
+  --> $DIR/async-fn-nonsend.rs:47:1
    |
 LL | fn assert_send(_: impl Send) {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0277]: `*mut (dyn std::ops::Fn() + 'static)` cannot be shared between threads safely
-  --> $DIR/async-fn-nonsend.rs:56:5
+  --> $DIR/async-fn-nonsend.rs:54:5
    |
 LL |     assert_send(non_sync_with_method_call());
    |     ^^^^^^^^^^^ `*mut (dyn std::ops::Fn() + 'static)` cannot be shared between threads safely
@@ -72,12 +72,12 @@ LL |     assert_send(non_sync_with_method_call());
    = note: required because it appears within the type `std::fmt::Formatter<'_>`
    = note: required because of the requirements on the impl of `std::marker::Send` for `&mut std::fmt::Formatter<'_>`
    = note: required because it appears within the type `for<'r, 's> {&'r mut std::fmt::Formatter<'s>, bool, impl std::future::Future, ()}`
-   = note: required because it appears within the type `[static generator@$DIR/async-fn-nonsend.rs:41:38: 47:2 for<'r, 's> {&'r mut std::fmt::Formatter<'s>, bool, impl std::future::Future, ()}]`
-   = note: required because it appears within the type `std::future::GenFuture<[static generator@$DIR/async-fn-nonsend.rs:41:38: 47:2 for<'r, 's> {&'r mut std::fmt::Formatter<'s>, bool, impl std::future::Future, ()}]>`
+   = note: required because it appears within the type `[static generator@$DIR/async-fn-nonsend.rs:39:38: 45:2 for<'r, 's> {&'r mut std::fmt::Formatter<'s>, bool, impl std::future::Future, ()}]`
+   = note: required because it appears within the type `std::future::GenFuture<[static generator@$DIR/async-fn-nonsend.rs:39:38: 45:2 for<'r, 's> {&'r mut std::fmt::Formatter<'s>, bool, impl std::future::Future, ()}]>`
    = note: required because it appears within the type `impl std::future::Future`
    = note: required because it appears within the type `impl std::future::Future`
 note: required by `assert_send`
-  --> $DIR/async-fn-nonsend.rs:49:1
+  --> $DIR/async-fn-nonsend.rs:47:1
    |
 LL | fn assert_send(_: impl Send) {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/src/test/ui/async-await/async-fn-path-elision.rs b/src/test/ui/async-await/async-fn-path-elision.rs
index 447e40dddd9..3f1f51c20ca 100644
--- a/src/test/ui/async-await/async-fn-path-elision.rs
+++ b/src/test/ui/async-await/async-fn-path-elision.rs
@@ -1,8 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-#![allow(dead_code)]
-
 struct HasLifetime<'a>(&'a bool);
 
 async fn error(lt: HasLifetime) { //~ ERROR implicit elided lifetime not allowed here
diff --git a/src/test/ui/async-await/async-fn-path-elision.stderr b/src/test/ui/async-await/async-fn-path-elision.stderr
index 3b311baba01..9694742200e 100644
--- a/src/test/ui/async-await/async-fn-path-elision.stderr
+++ b/src/test/ui/async-await/async-fn-path-elision.stderr
@@ -1,5 +1,5 @@
 error[E0726]: implicit elided lifetime not allowed here
-  --> $DIR/async-fn-path-elision.rs:8:20
+  --> $DIR/async-fn-path-elision.rs:5:20
    |
 LL | async fn error(lt: HasLifetime) {
    |                    ^^^^^^^^^^^- help: indicate the anonymous lifetime: `<'_>`
diff --git a/src/test/ui/async-await/async-fn-send-uses-nonsend.rs b/src/test/ui/async-await/async-fn-send-uses-nonsend.rs
index 5e1b8c6280b..35d9cb15540 100644
--- a/src/test/ui/async-await/async-fn-send-uses-nonsend.rs
+++ b/src/test/ui/async-await/async-fn-send-uses-nonsend.rs
@@ -2,8 +2,6 @@
 // edition:2018
 // compile-flags: --crate-type lib
 
-#![feature(async_await)]
-
 use std::{
     cell::RefCell,
     fmt::Debug,
diff --git a/src/test/ui/async-await/async-fn-size-moved-locals.rs b/src/test/ui/async-await/async-fn-size-moved-locals.rs
index 30b59d037d5..3ffcbb58595 100644
--- a/src/test/ui/async-await/async-fn-size-moved-locals.rs
+++ b/src/test/ui/async-await/async-fn-size-moved-locals.rs
@@ -12,8 +12,6 @@
 
 // edition:2018
 
-#![feature(async_await)]
-
 use std::future::Future;
 use std::pin::Pin;
 use std::task::{Context, Poll};
diff --git a/src/test/ui/async-await/async-fn-size.rs b/src/test/ui/async-await/async-fn-size.rs
index c6b2ed13b0a..b5c94ecb716 100644
--- a/src/test/ui/async-await/async-fn-size.rs
+++ b/src/test/ui/async-await/async-fn-size.rs
@@ -2,8 +2,6 @@
 // aux-build:arc_wake.rs
 // edition:2018
 
-#![feature(async_await)]
-
 extern crate arc_wake;
 
 use std::pin::Pin;
diff --git a/src/test/ui/async-await/async-matches-expr.rs b/src/test/ui/async-await/async-matches-expr.rs
index a6f0211e41f..299faa0587b 100644
--- a/src/test/ui/async-await/async-matches-expr.rs
+++ b/src/test/ui/async-await/async-matches-expr.rs
@@ -1,8 +1,6 @@
 // build-pass (FIXME(62277): could be check-pass?)
 // edition:2018
 
-#![feature(async_await)]
-
 macro_rules! match_expr {
     ($x:expr) => {}
 }
diff --git a/src/test/ui/async-await/async-unsafe-fn-call-in-safe.rs b/src/test/ui/async-await/async-unsafe-fn-call-in-safe.rs
index cb9156dcc6e..ccc1b8553f0 100644
--- a/src/test/ui/async-await/async-unsafe-fn-call-in-safe.rs
+++ b/src/test/ui/async-await/async-unsafe-fn-call-in-safe.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 struct S;
 
 impl S {
diff --git a/src/test/ui/async-await/async-unsafe-fn-call-in-safe.stderr b/src/test/ui/async-await/async-unsafe-fn-call-in-safe.stderr
index d22413beecb..c95fe173488 100644
--- a/src/test/ui/async-await/async-unsafe-fn-call-in-safe.stderr
+++ b/src/test/ui/async-await/async-unsafe-fn-call-in-safe.stderr
@@ -1,5 +1,5 @@
 error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
-  --> $DIR/async-unsafe-fn-call-in-safe.rs:14:5
+  --> $DIR/async-unsafe-fn-call-in-safe.rs:12:5
    |
 LL |     S::f();
    |     ^^^^^^ call to unsafe function
@@ -7,7 +7,7 @@ LL |     S::f();
    = note: consult the function's documentation for information on how to avoid undefined behavior
 
 error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
-  --> $DIR/async-unsafe-fn-call-in-safe.rs:15:5
+  --> $DIR/async-unsafe-fn-call-in-safe.rs:13:5
    |
 LL |     f();
    |     ^^^ call to unsafe function
@@ -15,7 +15,7 @@ LL |     f();
    = note: consult the function's documentation for information on how to avoid undefined behavior
 
 error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
-  --> $DIR/async-unsafe-fn-call-in-safe.rs:19:5
+  --> $DIR/async-unsafe-fn-call-in-safe.rs:17:5
    |
 LL |     S::f();
    |     ^^^^^^ call to unsafe function
@@ -23,7 +23,7 @@ LL |     S::f();
    = note: consult the function's documentation for information on how to avoid undefined behavior
 
 error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
-  --> $DIR/async-unsafe-fn-call-in-safe.rs:20:5
+  --> $DIR/async-unsafe-fn-call-in-safe.rs:18:5
    |
 LL |     f();
    |     ^^^ call to unsafe function
diff --git a/src/test/ui/async-await/async-with-closure.rs b/src/test/ui/async-await/async-with-closure.rs
index f7dc874affd..0b225526675 100644
--- a/src/test/ui/async-await/async-with-closure.rs
+++ b/src/test/ui/async-await/async-with-closure.rs
@@ -1,8 +1,6 @@
 // build-pass (FIXME(62277): could be check-pass?)
 // edition:2018
 
-#![feature(async_await)]
-
 trait MyClosure {
     type Args;
 }
diff --git a/src/test/ui/async-await/await-keyword/2015-edition-error-various-positions.rs b/src/test/ui/async-await/await-keyword/2015-edition-error-various-positions.rs
index 422a5a6394f..a3a20cb97e1 100644
--- a/src/test/ui/async-await/await-keyword/2015-edition-error-various-positions.rs
+++ b/src/test/ui/async-await/await-keyword/2015-edition-error-various-positions.rs
@@ -1,4 +1,3 @@
-#![feature(async_await)]
 #![allow(non_camel_case_types)]
 #![deny(keyword_idents)]
 
diff --git a/src/test/ui/async-await/await-keyword/2015-edition-error-various-positions.stderr b/src/test/ui/async-await/await-keyword/2015-edition-error-various-positions.stderr
index 8af0110169e..f1a22cda51b 100644
--- a/src/test/ui/async-await/await-keyword/2015-edition-error-various-positions.stderr
+++ b/src/test/ui/async-await/await-keyword/2015-edition-error-various-positions.stderr
@@ -1,11 +1,11 @@
 error: `await` is a keyword in the 2018 edition
-  --> $DIR/2015-edition-error-various-positions.rs:6:13
+  --> $DIR/2015-edition-error-various-positions.rs:5:13
    |
 LL |     pub mod await {
    |             ^^^^^ help: you can use a raw identifier to stay compatible: `r#await`
    |
 note: lint level defined here
-  --> $DIR/2015-edition-error-various-positions.rs:3:9
+  --> $DIR/2015-edition-error-various-positions.rs:2:9
    |
 LL | #![deny(keyword_idents)]
    |         ^^^^^^^^^^^^^^
@@ -13,7 +13,7 @@ LL | #![deny(keyword_idents)]
    = note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
 
 error: `await` is a keyword in the 2018 edition
-  --> $DIR/2015-edition-error-various-positions.rs:8:20
+  --> $DIR/2015-edition-error-various-positions.rs:7:20
    |
 LL |         pub struct await;
    |                    ^^^^^ help: you can use a raw identifier to stay compatible: `r#await`
@@ -22,7 +22,7 @@ LL |         pub struct await;
    = note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
 
 error: `await` is a keyword in the 2018 edition
-  --> $DIR/2015-edition-error-various-positions.rs:12:16
+  --> $DIR/2015-edition-error-various-positions.rs:11:16
    |
 LL | use outer_mod::await::await;
    |                ^^^^^ help: you can use a raw identifier to stay compatible: `r#await`
@@ -31,7 +31,7 @@ LL | use outer_mod::await::await;
    = note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
 
 error: `await` is a keyword in the 2018 edition
-  --> $DIR/2015-edition-error-various-positions.rs:12:23
+  --> $DIR/2015-edition-error-various-positions.rs:11:23
    |
 LL | use outer_mod::await::await;
    |                       ^^^^^ help: you can use a raw identifier to stay compatible: `r#await`
@@ -40,7 +40,7 @@ LL | use outer_mod::await::await;
    = note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
 
 error: `await` is a keyword in the 2018 edition
-  --> $DIR/2015-edition-error-various-positions.rs:17:14
+  --> $DIR/2015-edition-error-various-positions.rs:16:14
    |
 LL | struct Foo { await: () }
    |              ^^^^^ help: you can use a raw identifier to stay compatible: `r#await`
@@ -49,7 +49,7 @@ LL | struct Foo { await: () }
    = note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
 
 error: `await` is a keyword in the 2018 edition
-  --> $DIR/2015-edition-error-various-positions.rs:21:15
+  --> $DIR/2015-edition-error-various-positions.rs:20:15
    |
 LL | impl Foo { fn await() {} }
    |               ^^^^^ help: you can use a raw identifier to stay compatible: `r#await`
@@ -58,7 +58,7 @@ LL | impl Foo { fn await() {} }
    = note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
 
 error: `await` is a keyword in the 2018 edition
-  --> $DIR/2015-edition-error-various-positions.rs:25:14
+  --> $DIR/2015-edition-error-various-positions.rs:24:14
    |
 LL | macro_rules! await {
    |              ^^^^^ help: you can use a raw identifier to stay compatible: `r#await`
@@ -67,7 +67,7 @@ LL | macro_rules! await {
    = note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
 
 error: `await` is a keyword in the 2018 edition
-  --> $DIR/2015-edition-error-various-positions.rs:32:5
+  --> $DIR/2015-edition-error-various-positions.rs:31:5
    |
 LL |     await!();
    |     ^^^^^ help: you can use a raw identifier to stay compatible: `r#await`
@@ -76,7 +76,7 @@ LL |     await!();
    = note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
 
 error: `await` is a keyword in the 2018 edition
-  --> $DIR/2015-edition-error-various-positions.rs:35:11
+  --> $DIR/2015-edition-error-various-positions.rs:34:11
    |
 LL |     match await { await => {} }
    |           ^^^^^ help: you can use a raw identifier to stay compatible: `r#await`
@@ -85,7 +85,7 @@ LL |     match await { await => {} }
    = note: for more information, see issue #49716 <https://github.com/rust-lang/rust/issues/49716>
 
 error: `await` is a keyword in the 2018 edition
-  --> $DIR/2015-edition-error-various-positions.rs:35:19
+  --> $DIR/2015-edition-error-various-positions.rs:34:19
    |
 LL |     match await { await => {} }
    |                   ^^^^^ help: you can use a raw identifier to stay compatible: `r#await`
diff --git a/src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.rs b/src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.rs
index 92f3210ac89..5d85b0a243e 100644
--- a/src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.rs
+++ b/src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.rs
@@ -1,7 +1,6 @@
 // edition:2018
 
 #![allow(non_camel_case_types)]
-#![feature(async_await)]
 
 mod outer_mod {
     pub mod await { //~ ERROR expected identifier, found reserved keyword `await`
diff --git a/src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.stderr b/src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.stderr
index c4b82b29f02..05f28d0a5b2 100644
--- a/src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.stderr
+++ b/src/test/ui/async-await/await-keyword/2018-edition-error-in-non-macro-position.stderr
@@ -1,5 +1,5 @@
 error: expected identifier, found reserved keyword `await`
-  --> $DIR/2018-edition-error-in-non-macro-position.rs:7:13
+  --> $DIR/2018-edition-error-in-non-macro-position.rs:6:13
    |
 LL |     pub mod await {
    |             ^^^^^ expected identifier, found reserved keyword
@@ -9,7 +9,7 @@ LL |     pub mod r#await {
    |             ^^^^^^^
 
 error: expected identifier, found reserved keyword `await`
-  --> $DIR/2018-edition-error-in-non-macro-position.rs:8:20
+  --> $DIR/2018-edition-error-in-non-macro-position.rs:7:20
    |
 LL |         pub struct await;
    |                    ^^^^^ expected identifier, found reserved keyword
@@ -19,7 +19,7 @@ LL |         pub struct r#await;
    |                    ^^^^^^^
 
 error: expected identifier, found reserved keyword `await`
-  --> $DIR/2018-edition-error-in-non-macro-position.rs:11:22
+  --> $DIR/2018-edition-error-in-non-macro-position.rs:10:22
    |
 LL | use self::outer_mod::await::await;
    |                      ^^^^^ expected identifier, found reserved keyword
@@ -29,7 +29,7 @@ LL | use self::outer_mod::r#await::await;
    |                      ^^^^^^^
 
 error: expected identifier, found reserved keyword `await`
-  --> $DIR/2018-edition-error-in-non-macro-position.rs:11:29
+  --> $DIR/2018-edition-error-in-non-macro-position.rs:10:29
    |
 LL | use self::outer_mod::await::await;
    |                             ^^^^^ expected identifier, found reserved keyword
@@ -39,7 +39,7 @@ LL | use self::outer_mod::await::r#await;
    |                             ^^^^^^^
 
 error: expected identifier, found reserved keyword `await`
-  --> $DIR/2018-edition-error-in-non-macro-position.rs:14:14
+  --> $DIR/2018-edition-error-in-non-macro-position.rs:13:14
    |
 LL | struct Foo { await: () }
    |              ^^^^^ expected identifier, found reserved keyword
@@ -49,7 +49,7 @@ LL | struct Foo { r#await: () }
    |              ^^^^^^^
 
 error: expected identifier, found reserved keyword `await`
-  --> $DIR/2018-edition-error-in-non-macro-position.rs:17:15
+  --> $DIR/2018-edition-error-in-non-macro-position.rs:16:15
    |
 LL | impl Foo { fn await() {} }
    |               ^^^^^ expected identifier, found reserved keyword
@@ -59,7 +59,7 @@ LL | impl Foo { fn r#await() {} }
    |               ^^^^^^^
 
 error: expected identifier, found reserved keyword `await`
-  --> $DIR/2018-edition-error-in-non-macro-position.rs:20:14
+  --> $DIR/2018-edition-error-in-non-macro-position.rs:19:14
    |
 LL | macro_rules! await {
    |              ^^^^^ expected identifier, found reserved keyword
diff --git a/src/test/ui/async-await/await-keyword/incorrect-syntax-suggestions.rs b/src/test/ui/async-await/await-keyword/incorrect-syntax-suggestions.rs
index 25da337c587..22bcbb1064d 100644
--- a/src/test/ui/async-await/await-keyword/incorrect-syntax-suggestions.rs
+++ b/src/test/ui/async-await/await-keyword/incorrect-syntax-suggestions.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 async fn bar() -> Result<(), ()> {
     Ok(())
 }
diff --git a/src/test/ui/async-await/await-keyword/incorrect-syntax-suggestions.stderr b/src/test/ui/async-await/await-keyword/incorrect-syntax-suggestions.stderr
index db86d3d5d03..7caa9f26bc2 100644
--- a/src/test/ui/async-await/await-keyword/incorrect-syntax-suggestions.stderr
+++ b/src/test/ui/async-await/await-keyword/incorrect-syntax-suggestions.stderr
@@ -1,119 +1,119 @@
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:10:13
+  --> $DIR/incorrect-syntax-suggestions.rs:8:13
    |
 LL |     let _ = await bar();
    |             ^^^^^^^^^^^ help: `await` is a postfix operation: `bar().await`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:14:13
+  --> $DIR/incorrect-syntax-suggestions.rs:12:13
    |
 LL |     let _ = await? bar();
    |             ^^^^^^^^^^^^ help: `await` is a postfix operation: `bar().await?`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:18:13
+  --> $DIR/incorrect-syntax-suggestions.rs:16:13
    |
 LL |     let _ = await bar()?;
    |             ^^^^^^^^^^^^ help: `await` is a postfix operation: `bar()?.await`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:23:13
+  --> $DIR/incorrect-syntax-suggestions.rs:21:13
    |
 LL |     let _ = await { bar() };
    |             ^^^^^^^^^^^^^^^ help: `await` is a postfix operation: `{ bar() }.await`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:27:13
+  --> $DIR/incorrect-syntax-suggestions.rs:25:13
    |
 LL |     let _ = await(bar());
    |             ^^^^^^^^^^^^ help: `await` is a postfix operation: `(bar()).await`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:31:13
+  --> $DIR/incorrect-syntax-suggestions.rs:29:13
    |
 LL |     let _ = await { bar() }?;
    |             ^^^^^^^^^^^^^^^ help: `await` is a postfix operation: `{ bar() }.await`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:35:14
+  --> $DIR/incorrect-syntax-suggestions.rs:33:14
    |
 LL |     let _ = (await bar())?;
    |              ^^^^^^^^^^^ help: `await` is a postfix operation: `bar().await`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:39:24
+  --> $DIR/incorrect-syntax-suggestions.rs:37:24
    |
 LL |     let _ = bar().await();
    |                        ^^ help: `await` is not a method call, remove the parentheses
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:43:24
+  --> $DIR/incorrect-syntax-suggestions.rs:41:24
    |
 LL |     let _ = bar().await()?;
    |                        ^^ help: `await` is not a method call, remove the parentheses
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:55:13
+  --> $DIR/incorrect-syntax-suggestions.rs:53:13
    |
 LL |     let _ = await bar();
    |             ^^^^^^^^^^^ help: `await` is a postfix operation: `bar().await`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:60:13
+  --> $DIR/incorrect-syntax-suggestions.rs:58:13
    |
 LL |     let _ = await? bar();
    |             ^^^^^^^^^^^^ help: `await` is a postfix operation: `bar().await?`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:65:13
+  --> $DIR/incorrect-syntax-suggestions.rs:63:13
    |
 LL |     let _ = await bar()?;
    |             ^^^^^^^^^^^^ help: `await` is a postfix operation: `bar()?.await`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:70:14
+  --> $DIR/incorrect-syntax-suggestions.rs:68:14
    |
 LL |     let _ = (await bar())?;
    |              ^^^^^^^^^^^ help: `await` is a postfix operation: `bar().await`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:75:24
+  --> $DIR/incorrect-syntax-suggestions.rs:73:24
    |
 LL |     let _ = bar().await();
    |                        ^^ help: `await` is not a method call, remove the parentheses
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:80:24
+  --> $DIR/incorrect-syntax-suggestions.rs:78:24
    |
 LL |     let _ = bar().await()?;
    |                        ^^ help: `await` is not a method call, remove the parentheses
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:108:13
+  --> $DIR/incorrect-syntax-suggestions.rs:106:13
    |
 LL |     let _ = await!(bar());
    |             ^^^^^^^^^^^^^ help: `await` is a postfix operation: `bar().await`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:112:13
+  --> $DIR/incorrect-syntax-suggestions.rs:110:13
    |
 LL |     let _ = await!(bar())?;
    |             ^^^^^^^^^^^^^ help: `await` is a postfix operation: `bar().await`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:117:17
+  --> $DIR/incorrect-syntax-suggestions.rs:115:17
    |
 LL |         let _ = await!(bar())?;
    |                 ^^^^^^^^^^^^^ help: `await` is a postfix operation: `bar().await`
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:125:17
+  --> $DIR/incorrect-syntax-suggestions.rs:123:17
    |
 LL |         let _ = await!(bar())?;
    |                 ^^^^^^^^^^^^^ help: `await` is a postfix operation: `bar().await`
 
 error: expected expression, found `=>`
-  --> $DIR/incorrect-syntax-suggestions.rs:133:25
+  --> $DIR/incorrect-syntax-suggestions.rs:131:25
    |
 LL |     match await { await => () }
    |                   ----- ^^ expected expression
@@ -121,13 +121,13 @@ LL |     match await { await => () }
    |                   while parsing this incorrect await expression
 
 error: incorrect use of `await`
-  --> $DIR/incorrect-syntax-suggestions.rs:133:11
+  --> $DIR/incorrect-syntax-suggestions.rs:131:11
    |
 LL |     match await { await => () }
    |           ^^^^^^^^^^^^^^^^^^^^^ help: `await` is a postfix operation: `{ await => () }.await`
 
 error: expected one of `.`, `?`, `{`, or an operator, found `}`
-  --> $DIR/incorrect-syntax-suggestions.rs:136:1
+  --> $DIR/incorrect-syntax-suggestions.rs:134:1
    |
 LL |     match await { await => () }
    |     -----                      - expected one of `.`, `?`, `{`, or an operator here
@@ -138,7 +138,7 @@ LL | }
    | ^ unexpected token
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/incorrect-syntax-suggestions.rs:55:13
+  --> $DIR/incorrect-syntax-suggestions.rs:53:13
    |
 LL | fn foo9() -> Result<(), ()> {
    |    ---- this is not `async`
@@ -146,7 +146,7 @@ LL |     let _ = await bar();
    |             ^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/incorrect-syntax-suggestions.rs:60:13
+  --> $DIR/incorrect-syntax-suggestions.rs:58:13
    |
 LL | fn foo10() -> Result<(), ()> {
    |    ----- this is not `async`
@@ -154,7 +154,7 @@ LL |     let _ = await? bar();
    |             ^^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/incorrect-syntax-suggestions.rs:65:13
+  --> $DIR/incorrect-syntax-suggestions.rs:63:13
    |
 LL | fn foo11() -> Result<(), ()> {
    |    ----- this is not `async`
@@ -162,7 +162,7 @@ LL |     let _ = await bar()?;
    |             ^^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/incorrect-syntax-suggestions.rs:70:14
+  --> $DIR/incorrect-syntax-suggestions.rs:68:14
    |
 LL | fn foo12() -> Result<(), ()> {
    |    ----- this is not `async`
@@ -170,7 +170,7 @@ LL |     let _ = (await bar())?;
    |              ^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/incorrect-syntax-suggestions.rs:75:13
+  --> $DIR/incorrect-syntax-suggestions.rs:73:13
    |
 LL | fn foo13() -> Result<(), ()> {
    |    ----- this is not `async`
@@ -178,7 +178,7 @@ LL |     let _ = bar().await();
    |             ^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/incorrect-syntax-suggestions.rs:80:13
+  --> $DIR/incorrect-syntax-suggestions.rs:78:13
    |
 LL | fn foo14() -> Result<(), ()> {
    |    ----- this is not `async`
@@ -186,7 +186,7 @@ LL |     let _ = bar().await()?;
    |             ^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/incorrect-syntax-suggestions.rs:85:13
+  --> $DIR/incorrect-syntax-suggestions.rs:83:13
    |
 LL | fn foo15() -> Result<(), ()> {
    |    ----- this is not `async`
@@ -194,7 +194,7 @@ LL |     let _ = bar().await;
    |             ^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/incorrect-syntax-suggestions.rs:89:13
+  --> $DIR/incorrect-syntax-suggestions.rs:87:13
    |
 LL | fn foo16() -> Result<(), ()> {
    |    ----- this is not `async`
@@ -202,7 +202,7 @@ LL |     let _ = bar().await?;
    |             ^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/incorrect-syntax-suggestions.rs:94:17
+  --> $DIR/incorrect-syntax-suggestions.rs:92:17
    |
 LL |     fn foo() -> Result<(), ()> {
    |        --- this is not `async`
@@ -210,7 +210,7 @@ LL |         let _ = bar().await?;
    |                 ^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/incorrect-syntax-suggestions.rs:101:17
+  --> $DIR/incorrect-syntax-suggestions.rs:99:17
    |
 LL |     let foo = || {
    |               -- this is not `async`
@@ -218,7 +218,7 @@ LL |         let _ = bar().await?;
    |                 ^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/incorrect-syntax-suggestions.rs:117:17
+  --> $DIR/incorrect-syntax-suggestions.rs:115:17
    |
 LL |     fn foo() -> Result<(), ()> {
    |        --- this is not `async`
@@ -226,7 +226,7 @@ LL |         let _ = await!(bar())?;
    |                 ^^^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/incorrect-syntax-suggestions.rs:125:17
+  --> $DIR/incorrect-syntax-suggestions.rs:123:17
    |
 LL |     let foo = || {
    |               -- this is not `async`
@@ -234,7 +234,7 @@ LL |         let _ = await!(bar())?;
    |                 ^^^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0277]: the `?` operator can only be applied to values that implement `std::ops::Try`
-  --> $DIR/incorrect-syntax-suggestions.rs:18:19
+  --> $DIR/incorrect-syntax-suggestions.rs:16:19
    |
 LL |     let _ = await bar()?;
    |                   ^^^^^^ the `?` operator cannot be applied to type `impl std::future::Future`
diff --git a/src/test/ui/async-await/await-unsize.rs b/src/test/ui/async-await/await-unsize.rs
index d5e21257f4f..aa09d4bdf08 100644
--- a/src/test/ui/async-await/await-unsize.rs
+++ b/src/test/ui/async-await/await-unsize.rs
@@ -3,8 +3,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 async fn make_boxed_object() -> Box<dyn Send> {
     Box::new(()) as _
 }
diff --git a/src/test/ui/async-await/bound-normalization.rs b/src/test/ui/async-await/bound-normalization.rs
index 8026350aaf2..5d260682f1d 100644
--- a/src/test/ui/async-await/bound-normalization.rs
+++ b/src/test/ui/async-await/bound-normalization.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 // See issue 60414
 
 trait Trait {
diff --git a/src/test/ui/async-await/conditional-and-guaranteed-initialization.rs b/src/test/ui/async-await/conditional-and-guaranteed-initialization.rs
index a5947e7f718..56f4cbbd190 100644
--- a/src/test/ui/async-await/conditional-and-guaranteed-initialization.rs
+++ b/src/test/ui/async-await/conditional-and-guaranteed-initialization.rs
@@ -2,8 +2,6 @@
 // edition:2018
 // compile-flags: --crate-type lib
 
-#![feature(async_await)]
-
 async fn conditional_and_guaranteed_initialization(x: usize) -> usize {
     let y;
     if x > 5 {
diff --git a/src/test/ui/async-await/dont-print-desugared-async.rs b/src/test/ui/async-await/dont-print-desugared-async.rs
index 8150a260866..68341a24c4e 100644
--- a/src/test/ui/async-await/dont-print-desugared-async.rs
+++ b/src/test/ui/async-await/dont-print-desugared-async.rs
@@ -1,7 +1,6 @@
 // Test that we don't show variables with from async fn desugaring
 
 // edition:2018
-#![feature(async_await)]
 
 async fn async_fn(&ref mut s: &[i32]) {}
 //~^ ERROR cannot borrow data in a `&` reference as mutable [E0596]
diff --git a/src/test/ui/async-await/dont-print-desugared-async.stderr b/src/test/ui/async-await/dont-print-desugared-async.stderr
index 47726ba65df..2bf1e77f09b 100644
--- a/src/test/ui/async-await/dont-print-desugared-async.stderr
+++ b/src/test/ui/async-await/dont-print-desugared-async.stderr
@@ -1,5 +1,5 @@
 error[E0596]: cannot borrow data in a `&` reference as mutable
-  --> $DIR/dont-print-desugared-async.rs:6:20
+  --> $DIR/dont-print-desugared-async.rs:5:20
    |
 LL | async fn async_fn(&ref mut s: &[i32]) {}
    |                   -^^^^^^^^^
diff --git a/src/test/ui/async-await/dont-suggest-missing-await.rs b/src/test/ui/async-await/dont-suggest-missing-await.rs
index d551ef57985..a8e5b38ec1d 100644
--- a/src/test/ui/async-await/dont-suggest-missing-await.rs
+++ b/src/test/ui/async-await/dont-suggest-missing-await.rs
@@ -2,8 +2,6 @@
 
 // This test ensures we don't make the suggestion in bodies that aren't `async`.
 
-#![feature(async_await)]
-
 fn take_u32(x: u32) {}
 
 async fn make_u32() -> u32 {
diff --git a/src/test/ui/async-await/dont-suggest-missing-await.stderr b/src/test/ui/async-await/dont-suggest-missing-await.stderr
index c60b0d1f30e..c87e0bc221d 100644
--- a/src/test/ui/async-await/dont-suggest-missing-await.stderr
+++ b/src/test/ui/async-await/dont-suggest-missing-await.stderr
@@ -1,5 +1,5 @@
 error[E0308]: mismatched types
-  --> $DIR/dont-suggest-missing-await.rs:16:18
+  --> $DIR/dont-suggest-missing-await.rs:14:18
    |
 LL |         take_u32(x)
    |                  ^ expected u32, found opaque type
diff --git a/src/test/ui/async-await/drop-order/drop-order-for-async-fn-parameters-by-ref-binding.rs b/src/test/ui/async-await/drop-order/drop-order-for-async-fn-parameters-by-ref-binding.rs
index dfd8b2e361e..9817d377a78 100644
--- a/src/test/ui/async-await/drop-order/drop-order-for-async-fn-parameters-by-ref-binding.rs
+++ b/src/test/ui/async-await/drop-order/drop-order-for-async-fn-parameters-by-ref-binding.rs
@@ -3,7 +3,6 @@
 // run-pass
 
 #![allow(unused_variables)]
-#![feature(async_await)]
 
 // Test that the drop order for parameters in a fn and async fn matches up. Also test that
 // parameters (used or unused) are not dropped until the async fn completes execution.
diff --git a/src/test/ui/async-await/drop-order/drop-order-for-async-fn-parameters.rs b/src/test/ui/async-await/drop-order/drop-order-for-async-fn-parameters.rs
index 2a74485afb4..00072786a50 100644
--- a/src/test/ui/async-await/drop-order/drop-order-for-async-fn-parameters.rs
+++ b/src/test/ui/async-await/drop-order/drop-order-for-async-fn-parameters.rs
@@ -3,7 +3,6 @@
 // run-pass
 
 #![allow(unused_variables)]
-#![feature(async_await)]
 
 // Test that the drop order for parameters in a fn and async fn matches up. Also test that
 // parameters (used or unused) are not dropped until the async fn completes execution.
diff --git a/src/test/ui/async-await/drop-order/drop-order-for-locals-when-cancelled.rs b/src/test/ui/async-await/drop-order/drop-order-for-locals-when-cancelled.rs
index db396d3957e..5d020c9a526 100644
--- a/src/test/ui/async-await/drop-order/drop-order-for-locals-when-cancelled.rs
+++ b/src/test/ui/async-await/drop-order/drop-order-for-locals-when-cancelled.rs
@@ -2,9 +2,7 @@
 // edition:2018
 // run-pass
 
-#![allow(unused_variables)]
 #![deny(dead_code)]
-#![feature(async_await)]
 
 // Test that the drop order for locals in a fn and async fn matches up.
 extern crate arc_wake;
diff --git a/src/test/ui/async-await/drop-order/drop-order-locals-are-hidden.rs b/src/test/ui/async-await/drop-order/drop-order-locals-are-hidden.rs
index bcdb8878eb5..79dedb1ba28 100644
--- a/src/test/ui/async-await/drop-order/drop-order-locals-are-hidden.rs
+++ b/src/test/ui/async-await/drop-order/drop-order-locals-are-hidden.rs
@@ -1,8 +1,5 @@
 // edition:2018
 
-#![allow(unused_variables)]
-#![feature(async_await)]
-
 async fn foobar_async(x: u32, (a, _, _c): (u32, u32, u32), _: u32, _y: u32) {
     assert_eq!(__arg1, (1, 2, 3)); //~ ERROR cannot find value `__arg1` in this scope [E0425]
     assert_eq!(__arg2, 4); //~ ERROR cannot find value `__arg2` in this scope [E0425]
diff --git a/src/test/ui/async-await/drop-order/drop-order-locals-are-hidden.stderr b/src/test/ui/async-await/drop-order/drop-order-locals-are-hidden.stderr
index 484e1f4f426..aa04a613f47 100644
--- a/src/test/ui/async-await/drop-order/drop-order-locals-are-hidden.stderr
+++ b/src/test/ui/async-await/drop-order/drop-order-locals-are-hidden.stderr
@@ -1,23 +1,23 @@
 error[E0425]: cannot find value `__arg1` in this scope
-  --> $DIR/drop-order-locals-are-hidden.rs:7:16
+  --> $DIR/drop-order-locals-are-hidden.rs:4:16
    |
 LL |     assert_eq!(__arg1, (1, 2, 3));
    |                ^^^^^^ not found in this scope
 
 error[E0425]: cannot find value `__arg2` in this scope
-  --> $DIR/drop-order-locals-are-hidden.rs:8:16
+  --> $DIR/drop-order-locals-are-hidden.rs:5:16
    |
 LL |     assert_eq!(__arg2, 4);
    |                ^^^^^^ not found in this scope
 
 error[E0425]: cannot find value `__arg0` in this scope
-  --> $DIR/drop-order-locals-are-hidden.rs:12:16
+  --> $DIR/drop-order-locals-are-hidden.rs:9:16
    |
 LL |     assert_eq!(__arg0, 1);
    |                ^^^^^^ not found in this scope
 
 error[E0425]: cannot find value `__arg1` in this scope
-  --> $DIR/drop-order-locals-are-hidden.rs:13:16
+  --> $DIR/drop-order-locals-are-hidden.rs:10:16
    |
 LL |     assert_eq!(__arg1, 2);
    |                ^^^^^^ not found in this scope
diff --git a/src/test/ui/async-await/drop-order/drop-order-when-cancelled.rs b/src/test/ui/async-await/drop-order/drop-order-when-cancelled.rs
index 410a623681d..84fe79348c6 100644
--- a/src/test/ui/async-await/drop-order/drop-order-when-cancelled.rs
+++ b/src/test/ui/async-await/drop-order/drop-order-when-cancelled.rs
@@ -2,9 +2,6 @@
 // edition:2018
 // run-pass
 
-#![allow(unused_variables)]
-#![feature(async_await)]
-
 // Test that the drop order for parameters in a fn and async fn matches up. Also test that
 // parameters (used or unused) are not dropped until the async fn is cancelled.
 // This file is mostly copy-pasted from drop-order-for-async-fn-parameters.rs
diff --git a/src/test/ui/async-await/edition-deny-async-fns-2015.rs b/src/test/ui/async-await/edition-deny-async-fns-2015.rs
index a5bc1810154..c85896150c2 100644
--- a/src/test/ui/async-await/edition-deny-async-fns-2015.rs
+++ b/src/test/ui/async-await/edition-deny-async-fns-2015.rs
@@ -1,7 +1,5 @@
 // edition:2015
 
-#![feature(async_await)]
-
 async fn foo() {} //~ ERROR `async fn` is not permitted in the 2015 edition
 
 fn baz() { async fn foo() {} } //~ ERROR `async fn` is not permitted in the 2015 edition
diff --git a/src/test/ui/async-await/edition-deny-async-fns-2015.stderr b/src/test/ui/async-await/edition-deny-async-fns-2015.stderr
index efb4462095d..d3f88af09d1 100644
--- a/src/test/ui/async-await/edition-deny-async-fns-2015.stderr
+++ b/src/test/ui/async-await/edition-deny-async-fns-2015.stderr
@@ -1,59 +1,59 @@
 error[E0670]: `async fn` is not permitted in the 2015 edition
-  --> $DIR/edition-deny-async-fns-2015.rs:5:1
+  --> $DIR/edition-deny-async-fns-2015.rs:3:1
    |
 LL | async fn foo() {}
    | ^^^^^
 
 error[E0670]: `async fn` is not permitted in the 2015 edition
-  --> $DIR/edition-deny-async-fns-2015.rs:7:12
+  --> $DIR/edition-deny-async-fns-2015.rs:5:12
    |
 LL | fn baz() { async fn foo() {} }
    |            ^^^^^
 
 error[E0670]: `async fn` is not permitted in the 2015 edition
-  --> $DIR/edition-deny-async-fns-2015.rs:10:5
+  --> $DIR/edition-deny-async-fns-2015.rs:8:5
    |
 LL |     async fn bar() {}
    |     ^^^^^
 
 error[E0670]: `async fn` is not permitted in the 2015 edition
-  --> $DIR/edition-deny-async-fns-2015.rs:9:1
+  --> $DIR/edition-deny-async-fns-2015.rs:7:1
    |
 LL | async fn async_baz() {
    | ^^^^^
 
 error[E0670]: `async fn` is not permitted in the 2015 edition
-  --> $DIR/edition-deny-async-fns-2015.rs:16:5
+  --> $DIR/edition-deny-async-fns-2015.rs:14:5
    |
 LL |     async fn foo() {}
    |     ^^^^^
 
 error[E0670]: `async fn` is not permitted in the 2015 edition
-  --> $DIR/edition-deny-async-fns-2015.rs:20:5
+  --> $DIR/edition-deny-async-fns-2015.rs:18:5
    |
 LL |     async fn foo() {}
    |     ^^^^^
 
 error[E0670]: `async fn` is not permitted in the 2015 edition
-  --> $DIR/edition-deny-async-fns-2015.rs:38:9
+  --> $DIR/edition-deny-async-fns-2015.rs:36:9
    |
 LL |         async fn bar() {}
    |         ^^^^^
 
 error[E0670]: `async fn` is not permitted in the 2015 edition
-  --> $DIR/edition-deny-async-fns-2015.rs:28:9
+  --> $DIR/edition-deny-async-fns-2015.rs:26:9
    |
 LL |         async fn foo() {}
    |         ^^^^^
 
 error[E0670]: `async fn` is not permitted in the 2015 edition
-  --> $DIR/edition-deny-async-fns-2015.rs:33:13
+  --> $DIR/edition-deny-async-fns-2015.rs:31:13
    |
 LL |             async fn bar() {}
    |             ^^^^^
 
 error[E0706]: trait fns cannot be declared `async`
-  --> $DIR/edition-deny-async-fns-2015.rs:20:5
+  --> $DIR/edition-deny-async-fns-2015.rs:18:5
    |
 LL |     async fn foo() {}
    |     ^^^^^^^^^^^^^^^^^
diff --git a/src/test/ui/async-await/generics-and-bounds.rs b/src/test/ui/async-await/generics-and-bounds.rs
index 8b60f2f82f1..963b19b34a6 100644
--- a/src/test/ui/async-await/generics-and-bounds.rs
+++ b/src/test/ui/async-await/generics-and-bounds.rs
@@ -2,8 +2,6 @@
 // edition:2018
 // compile-flags: --crate-type lib
 
-#![feature(async_await)]
-
 use std::future::Future;
 
 pub async fn simple_generic<T>() {}
diff --git a/src/test/ui/async-await/issue-60709.rs b/src/test/ui/async-await/issue-60709.rs
index ad0b49fa4a2..9ee419c4a56 100644
--- a/src/test/ui/async-await/issue-60709.rs
+++ b/src/test/ui/async-await/issue-60709.rs
@@ -4,9 +4,6 @@
 
 // run-pass
 
-#![feature(async_await)]
-#![allow(unused)]
-
 use std::future::Future;
 use std::task::Poll;
 use std::task::Context;
diff --git a/src/test/ui/async-await/issue-61452.rs b/src/test/ui/async-await/issue-61452.rs
index 20b9b645dae..9381251ad69 100644
--- a/src/test/ui/async-await/issue-61452.rs
+++ b/src/test/ui/async-await/issue-61452.rs
@@ -1,5 +1,4 @@
 // edition:2018
-#![feature(async_await)]
 
 pub async fn f(x: Option<usize>) {
     x.take();
diff --git a/src/test/ui/async-await/issue-61452.stderr b/src/test/ui/async-await/issue-61452.stderr
index 742490d8de4..5eb4b548717 100644
--- a/src/test/ui/async-await/issue-61452.stderr
+++ b/src/test/ui/async-await/issue-61452.stderr
@@ -1,5 +1,5 @@
 error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
-  --> $DIR/issue-61452.rs:5:5
+  --> $DIR/issue-61452.rs:4:5
    |
 LL | pub async fn f(x: Option<usize>) {
    |                - help: consider changing this to be mutable: `mut x`
@@ -7,7 +7,7 @@ LL |     x.take();
    |     ^ cannot borrow as mutable
 
 error[E0384]: cannot assign twice to immutable variable `x`
-  --> $DIR/issue-61452.rs:10:5
+  --> $DIR/issue-61452.rs:9:5
    |
 LL | pub async fn g(x: usize) {
    |                -
diff --git a/src/test/ui/async-await/issue-61793.rs b/src/test/ui/async-await/issue-61793.rs
index a18fad8bb91..f6084be9167 100644
--- a/src/test/ui/async-await/issue-61793.rs
+++ b/src/test/ui/async-await/issue-61793.rs
@@ -6,9 +6,6 @@
 // build-pass (FIXME(62277): could be check-pass?)
 // edition:2018
 
-#![feature(async_await)]
-#![allow(unused)]
-
 async fn foo<F>(_: &(), _: F) {}
 
 fn main() {
diff --git a/src/test/ui/async-await/issue-61949-self-return-type.rs b/src/test/ui/async-await/issue-61949-self-return-type.rs
index c5a66d5d4a3..6a28c69193d 100644
--- a/src/test/ui/async-await/issue-61949-self-return-type.rs
+++ b/src/test/ui/async-await/issue-61949-self-return-type.rs
@@ -1,6 +1,5 @@
 // ignore-tidy-linelength
 // edition:2018
-#![feature(async_await)]
 
 // This test checks that `Self` is prohibited as a return type. See #61949 for context.
 
diff --git a/src/test/ui/async-await/issue-61949-self-return-type.stderr b/src/test/ui/async-await/issue-61949-self-return-type.stderr
index a9ae544502d..12fb77d8dd6 100644
--- a/src/test/ui/async-await/issue-61949-self-return-type.stderr
+++ b/src/test/ui/async-await/issue-61949-self-return-type.stderr
@@ -1,5 +1,5 @@
 error: `async fn` return type cannot contain a projection or `Self` that references lifetimes from a parent scope
-  --> $DIR/issue-61949-self-return-type.rs:12:40
+  --> $DIR/issue-61949-self-return-type.rs:11:40
    |
 LL |     pub async fn new(_bar: &'a i32) -> Self {
    |                                        ^^^^
diff --git a/src/test/ui/async-await/issue-62658.rs b/src/test/ui/async-await/issue-62658.rs
index 90fbb47bffd..d0af01e0c00 100644
--- a/src/test/ui/async-await/issue-62658.rs
+++ b/src/test/ui/async-await/issue-62658.rs
@@ -4,8 +4,6 @@
 // build-pass
 // edition:2018
 
-#![feature(async_await)]
-
 async fn noop() {}
 
 async fn foo() {
diff --git a/src/test/ui/async-await/issues/issue-51719.rs b/src/test/ui/async-await/issues/issue-51719.rs
index 361a49c2774..09241f982aa 100644
--- a/src/test/ui/async-await/issues/issue-51719.rs
+++ b/src/test/ui/async-await/issues/issue-51719.rs
@@ -2,8 +2,6 @@
 //
 // Tests that the .await syntax can't be used to make a generator
 
-#![feature(async_await)]
-
 async fn foo() {}
 
 fn make_generator() {
diff --git a/src/test/ui/async-await/issues/issue-51719.stderr b/src/test/ui/async-await/issues/issue-51719.stderr
index 2a9fb6cf0df..6c3c8889da7 100644
--- a/src/test/ui/async-await/issues/issue-51719.stderr
+++ b/src/test/ui/async-await/issues/issue-51719.stderr
@@ -1,5 +1,5 @@
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/issue-51719.rs:10:19
+  --> $DIR/issue-51719.rs:8:19
    |
 LL |     let _gen = || foo().await;
    |                -- ^^^^^^^^^^^ only allowed inside `async` functions and blocks
diff --git a/src/test/ui/async-await/issues/issue-51751.rs b/src/test/ui/async-await/issues/issue-51751.rs
index 7afd7ecc826..bc85a96cea9 100644
--- a/src/test/ui/async-await/issues/issue-51751.rs
+++ b/src/test/ui/async-await/issues/issue-51751.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 async fn inc(limit: i64) -> i64 {
     limit + 1
 }
diff --git a/src/test/ui/async-await/issues/issue-51751.stderr b/src/test/ui/async-await/issues/issue-51751.stderr
index 97b63d1590e..e50c78534f8 100644
--- a/src/test/ui/async-await/issues/issue-51751.stderr
+++ b/src/test/ui/async-await/issues/issue-51751.stderr
@@ -1,5 +1,5 @@
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/issue-51751.rs:11:20
+  --> $DIR/issue-51751.rs:9:20
    |
 LL | fn main() {
    |    ---- this is not `async`
diff --git a/src/test/ui/async-await/issues/issue-53249.rs b/src/test/ui/async-await/issues/issue-53249.rs
index c57dc6b0ef6..5cae0704444 100644
--- a/src/test/ui/async-await/issues/issue-53249.rs
+++ b/src/test/ui/async-await/issues/issue-53249.rs
@@ -1,7 +1,7 @@
 // build-pass (FIXME(62277): could be check-pass?)
 // edition:2018
 
-#![feature(arbitrary_self_types, async_await)]
+#![feature(arbitrary_self_types)]
 
 use std::task::{self, Poll};
 use std::future::Future;
diff --git a/src/test/ui/async-await/issues/issue-54752-async-block.rs b/src/test/ui/async-await/issues/issue-54752-async-block.rs
index 0036de90b25..64f260cfe01 100644
--- a/src/test/ui/async-await/issues/issue-54752-async-block.rs
+++ b/src/test/ui/async-await/issues/issue-54752-async-block.rs
@@ -3,7 +3,4 @@
 // edition:2018
 // pp-exact
 
-#![feature(async_await)]
-#![allow(unused_parens)]
-
 fn main() { let _a = (async  { }); }
diff --git a/src/test/ui/async-await/issues/issue-54974.rs b/src/test/ui/async-await/issues/issue-54974.rs
index 040989b33fc..9adc0a82323 100644
--- a/src/test/ui/async-await/issues/issue-54974.rs
+++ b/src/test/ui/async-await/issues/issue-54974.rs
@@ -1,8 +1,6 @@
 // build-pass (FIXME(62277): could be check-pass?)
 // edition:2018
 
-#![feature(async_await)]
-
 use std::sync::Arc;
 
 trait SomeTrait: Send + Sync + 'static {
diff --git a/src/test/ui/async-await/issues/issue-55324.rs b/src/test/ui/async-await/issues/issue-55324.rs
index 4f383a51a88..1d77d420127 100644
--- a/src/test/ui/async-await/issues/issue-55324.rs
+++ b/src/test/ui/async-await/issues/issue-55324.rs
@@ -1,11 +1,8 @@
 // build-pass (FIXME(62277): could be check-pass?)
 // edition:2018
 
-#![feature(async_await)]
-
 use std::future::Future;
 
-#[allow(unused)]
 async fn foo<F: Future<Output = i32>>(x: &i32, future: F) -> i32 {
     let y = future.await;
     *x + y
diff --git a/src/test/ui/async-await/issues/issue-55809.rs b/src/test/ui/async-await/issues/issue-55809.rs
index b7e60b773b4..3b271775a38 100644
--- a/src/test/ui/async-await/issues/issue-55809.rs
+++ b/src/test/ui/async-await/issues/issue-55809.rs
@@ -1,8 +1,6 @@
 // edition:2018
 // run-pass
 
-#![feature(async_await)]
-
 trait Foo { }
 
 impl Foo for () { }
diff --git a/src/test/ui/async-await/issues/issue-58885.rs b/src/test/ui/async-await/issues/issue-58885.rs
index 47744aeea60..72a45b5007d 100644
--- a/src/test/ui/async-await/issues/issue-58885.rs
+++ b/src/test/ui/async-await/issues/issue-58885.rs
@@ -1,8 +1,6 @@
 // build-pass (FIXME(62277): could be check-pass?)
 // edition:2018
 
-#![feature(async_await)]
-
 struct Xyz {
     a: u64,
 }
diff --git a/src/test/ui/async-await/issues/issue-59001.rs b/src/test/ui/async-await/issues/issue-59001.rs
index 9334ddb0af5..ea780d9f622 100644
--- a/src/test/ui/async-await/issues/issue-59001.rs
+++ b/src/test/ui/async-await/issues/issue-59001.rs
@@ -1,11 +1,8 @@
 // build-pass (FIXME(62277): could be check-pass?)
 // edition:2018
 
-#![feature(async_await)]
-
 use std::future::Future;
 
-#[allow(unused)]
 async fn enter<'a, F, R>(mut callback: F)
 where
     F: FnMut(&'a mut i32) -> R,
diff --git a/src/test/ui/async-await/issues/issue-59972.rs b/src/test/ui/async-await/issues/issue-59972.rs
index 8f4254b10ce..154226e8bb8 100644
--- a/src/test/ui/async-await/issues/issue-59972.rs
+++ b/src/test/ui/async-await/issues/issue-59972.rs
@@ -6,8 +6,6 @@
 
 // compile-flags: --edition=2018
 
-#![feature(async_await)]
-
 pub enum Uninhabited { }
 
 fn uninhabited_async() -> Uninhabited {
@@ -16,14 +14,12 @@ fn uninhabited_async() -> Uninhabited {
 
 async fn noop() { }
 
-#[allow(unused)]
 async fn contains_never() {
     let error = uninhabited_async();
     noop().await;
     let error2 = error;
 }
 
-#[allow(unused)]
 async fn overlap_never() {
     let error1 = uninhabited_async();
     noop().await;
@@ -35,6 +31,4 @@ async fn overlap_never() {
 
 #[allow(unused_must_use)]
 fn main() {
-    contains_never();
-    overlap_never();
 }
diff --git a/src/test/ui/async-await/issues/issue-60518.rs b/src/test/ui/async-await/issues/issue-60518.rs
index e4bdc96511e..1ca05160751 100644
--- a/src/test/ui/async-await/issues/issue-60518.rs
+++ b/src/test/ui/async-await/issues/issue-60518.rs
@@ -1,8 +1,6 @@
 // build-pass (FIXME(62277): could be check-pass?)
 // edition:2018
 
-#![feature(async_await)]
-
 // This is a regression test to ensure that simple bindings (where replacement arguments aren't
 // created during async fn lowering) that have their DefId used during HIR lowering (such as impl
 // trait) are visited during def collection and thus have a DefId.
diff --git a/src/test/ui/async-await/issues/issue-60655-latebound-regions.rs b/src/test/ui/async-await/issues/issue-60655-latebound-regions.rs
index 99213e64d16..0d015e54f8b 100644
--- a/src/test/ui/async-await/issues/issue-60655-latebound-regions.rs
+++ b/src/test/ui/async-await/issues/issue-60655-latebound-regions.rs
@@ -3,7 +3,6 @@
 // build-pass (FIXME(62277): could be check-pass?)
 // edition:2018
 
-#![feature(async_await)]
 #![feature(type_alias_impl_trait)]
 
 use std::future::Future;
diff --git a/src/test/ui/async-await/issues/issue-60674.rs b/src/test/ui/async-await/issues/issue-60674.rs
index 99cdcbafc76..c0e34a8df77 100644
--- a/src/test/ui/async-await/issues/issue-60674.rs
+++ b/src/test/ui/async-await/issues/issue-60674.rs
@@ -1,7 +1,6 @@
 // aux-build:issue-60674.rs
 // build-pass (FIXME(62277): could be check-pass?)
 // edition:2018
-#![feature(async_await)]
 
 // This is a regression test that ensures that `mut` patterns are not lost when provided as input
 // to a proc macro.
diff --git a/src/test/ui/async-await/issues/issue-61187.rs b/src/test/ui/async-await/issues/issue-61187.rs
index 8b939b43b8b..8585a425111 100644
--- a/src/test/ui/async-await/issues/issue-61187.rs
+++ b/src/test/ui/async-await/issues/issue-61187.rs
@@ -1,8 +1,6 @@
 // edition:2018
-#![feature(async_await)]
 
-fn main() {
-}
+fn main() {}
 
 async fn response(data: Vec<u8>) {
     data.reverse(); //~ ERROR E0596
diff --git a/src/test/ui/async-await/issues/issue-61187.stderr b/src/test/ui/async-await/issues/issue-61187.stderr
index a0314226320..4d361c824dd 100644
--- a/src/test/ui/async-await/issues/issue-61187.stderr
+++ b/src/test/ui/async-await/issues/issue-61187.stderr
@@ -1,5 +1,5 @@
 error[E0596]: cannot borrow `data` as mutable, as it is not declared as mutable
-  --> $DIR/issue-61187.rs:8:5
+  --> $DIR/issue-61187.rs:6:5
    |
 LL | async fn response(data: Vec<u8>) {
    |                   ---- help: consider changing this to be mutable: `mut data`
diff --git a/src/test/ui/async-await/issues/issue-61986.rs b/src/test/ui/async-await/issues/issue-61986.rs
index 77ecc47dfef..879bc6912fc 100644
--- a/src/test/ui/async-await/issues/issue-61986.rs
+++ b/src/test/ui/async-await/issues/issue-61986.rs
@@ -4,8 +4,6 @@
 // Tests that we properly handle StorageDead/StorageLives for temporaries
 // created in async loop bodies.
 
-#![feature(async_await)]
-
 async fn bar() -> Option<()> {
     Some(())
 }
diff --git a/src/test/ui/async-await/issues/issue-62009-1.rs b/src/test/ui/async-await/issues/issue-62009-1.rs
index ac6605bceff..3ee7ab2e9d1 100644
--- a/src/test/ui/async-await/issues/issue-62009-1.rs
+++ b/src/test/ui/async-await/issues/issue-62009-1.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 async fn print_dur() {}
 
 fn main() {
diff --git a/src/test/ui/async-await/issues/issue-62009-1.stderr b/src/test/ui/async-await/issues/issue-62009-1.stderr
index 2bbb6d079ea..cd155f0fc32 100644
--- a/src/test/ui/async-await/issues/issue-62009-1.stderr
+++ b/src/test/ui/async-await/issues/issue-62009-1.stderr
@@ -1,5 +1,5 @@
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/issue-62009-1.rs:8:5
+  --> $DIR/issue-62009-1.rs:6:5
    |
 LL | fn main() {
    |    ---- this is not `async`
@@ -7,7 +7,7 @@ LL |     async { let (); }.await;
    |     ^^^^^^^^^^^^^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/issue-62009-1.rs:10:5
+  --> $DIR/issue-62009-1.rs:8:5
    |
 LL |   fn main() {
    |      ---- this is not `async`
@@ -19,7 +19,7 @@ LL | |     }.await;
    | |___________^ only allowed inside `async` functions and blocks
 
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/issue-62009-1.rs:14:5
+  --> $DIR/issue-62009-1.rs:12:5
    |
 LL | fn main() {
    |    ---- this is not `async`
@@ -27,11 +27,11 @@ LL | fn main() {
 LL |     (|_| 2333).await;
    |     ^^^^^^^^^^^^^^^^ only allowed inside `async` functions and blocks
 
-error[E0277]: the trait bound `[closure@$DIR/issue-62009-1.rs:14:5: 14:15]: std::future::Future` is not satisfied
-  --> $DIR/issue-62009-1.rs:14:5
+error[E0277]: the trait bound `[closure@$DIR/issue-62009-1.rs:12:5: 12:15]: std::future::Future` is not satisfied
+  --> $DIR/issue-62009-1.rs:12:5
    |
 LL |     (|_| 2333).await;
-   |     ^^^^^^^^^^^^^^^^ the trait `std::future::Future` is not implemented for `[closure@$DIR/issue-62009-1.rs:14:5: 14:15]`
+   |     ^^^^^^^^^^^^^^^^ the trait `std::future::Future` is not implemented for `[closure@$DIR/issue-62009-1.rs:12:5: 12:15]`
    |
    = note: required by `std::future::poll_with_tls_context`
 
diff --git a/src/test/ui/async-await/issues/issue-62009-2.rs b/src/test/ui/async-await/issues/issue-62009-2.rs
index 52b62eaa9e0..cb7336e6134 100644
--- a/src/test/ui/async-await/issues/issue-62009-2.rs
+++ b/src/test/ui/async-await/issues/issue-62009-2.rs
@@ -1,6 +1,6 @@
 // edition:2018
 
-#![feature(async_await, async_closure)]
+#![feature(async_closure)]
 
 async fn print_dur() {}
 
diff --git a/src/test/ui/async-await/issues/issue-62517-1.rs b/src/test/ui/async-await/issues/issue-62517-1.rs
index 5955d9751af..4689ce36a78 100644
--- a/src/test/ui/async-await/issues/issue-62517-1.rs
+++ b/src/test/ui/async-await/issues/issue-62517-1.rs
@@ -5,8 +5,6 @@
 // edition:2018
 // check-pass
 
-#![feature(async_await)]
-
 trait FirstTrait {}
 trait SecondTrait {
     type Item: ?Sized;
diff --git a/src/test/ui/async-await/issues/issue-62517-2.rs b/src/test/ui/async-await/issues/issue-62517-2.rs
index 17fac408151..aaf28d6c132 100644
--- a/src/test/ui/async-await/issues/issue-62517-2.rs
+++ b/src/test/ui/async-await/issues/issue-62517-2.rs
@@ -5,8 +5,6 @@
 // edition:2018
 // check-pass
 
-#![feature(async_await)]
-
 trait Object {}
 
 trait Alpha<Param: ?Sized> {}
diff --git a/src/test/ui/async-await/issues/issue-63388-1.nll.stderr b/src/test/ui/async-await/issues/issue-63388-1.nll.stderr
index 64fd1a4a78d..22610fe54a4 100644
--- a/src/test/ui/async-await/issues/issue-63388-1.nll.stderr
+++ b/src/test/ui/async-await/issues/issue-63388-1.nll.stderr
@@ -1,5 +1,5 @@
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/issue-63388-1.rs:14:10
+  --> $DIR/issue-63388-1.rs:12:10
    |
 LL |     ) -> &dyn Foo
    |          ^^^^^^^^
@@ -7,7 +7,7 @@ LL |     ) -> &dyn Foo
    = note: hidden type `impl std::future::Future` captures lifetime '_#22r
 
 error: lifetime may not live long enough
-  --> $DIR/issue-63388-1.rs:15:5
+  --> $DIR/issue-63388-1.rs:13:5
    |
 LL |       async fn do_sth<'a>(
    |                       -- lifetime `'a` defined here
diff --git a/src/test/ui/async-await/issues/issue-63388-1.rs b/src/test/ui/async-await/issues/issue-63388-1.rs
index 80003b0d701..3cde5de2198 100644
--- a/src/test/ui/async-await/issues/issue-63388-1.rs
+++ b/src/test/ui/async-await/issues/issue-63388-1.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 struct Xyz {
     a: u64,
 }
diff --git a/src/test/ui/async-await/issues/issue-63388-1.stderr b/src/test/ui/async-await/issues/issue-63388-1.stderr
index 5302adce5a0..a54cadb0cd2 100644
--- a/src/test/ui/async-await/issues/issue-63388-1.stderr
+++ b/src/test/ui/async-await/issues/issue-63388-1.stderr
@@ -1,5 +1,5 @@
 error[E0623]: lifetime mismatch
-  --> $DIR/issue-63388-1.rs:14:10
+  --> $DIR/issue-63388-1.rs:12:10
    |
 LL |         &'a self, foo: &dyn Foo
    |         -------- this parameter and the return type are declared with different lifetimes...
diff --git a/src/test/ui/async-await/issues/issue-63388-2.nll.stderr b/src/test/ui/async-await/issues/issue-63388-2.nll.stderr
index b91cdc1b770..7781af89dea 100644
--- a/src/test/ui/async-await/issues/issue-63388-2.nll.stderr
+++ b/src/test/ui/async-await/issues/issue-63388-2.nll.stderr
@@ -1,5 +1,5 @@
 error[E0106]: missing lifetime specifier
-  --> $DIR/issue-63388-2.rs:14:10
+  --> $DIR/issue-63388-2.rs:12:10
    |
 LL |     ) -> &dyn Foo
    |          ^ help: consider using the named lifetime: `&'a`
diff --git a/src/test/ui/async-await/issues/issue-63388-2.rs b/src/test/ui/async-await/issues/issue-63388-2.rs
index ca9bbef0d50..73e7f25f97d 100644
--- a/src/test/ui/async-await/issues/issue-63388-2.rs
+++ b/src/test/ui/async-await/issues/issue-63388-2.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 struct Xyz {
     a: u64,
 }
diff --git a/src/test/ui/async-await/issues/issue-63388-2.stderr b/src/test/ui/async-await/issues/issue-63388-2.stderr
index 1810138dc80..1edeb3d5493 100644
--- a/src/test/ui/async-await/issues/issue-63388-2.stderr
+++ b/src/test/ui/async-await/issues/issue-63388-2.stderr
@@ -1,5 +1,5 @@
 error[E0106]: missing lifetime specifier
-  --> $DIR/issue-63388-2.rs:14:10
+  --> $DIR/issue-63388-2.rs:12:10
    |
 LL |     ) -> &dyn Foo
    |          ^ help: consider using the named lifetime: `&'a`
@@ -7,19 +7,19 @@ LL |     ) -> &dyn Foo
    = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from `foo` or `bar`
 
 error: cannot infer an appropriate lifetime
-  --> $DIR/issue-63388-2.rs:13:9
+  --> $DIR/issue-63388-2.rs:11:9
    |
 LL |         foo: &dyn Foo, bar: &'a dyn Foo
    |         ^^^ ...but this borrow...
 LL |     ) -> &dyn Foo
    |          -------- this return type evaluates to the `'static` lifetime...
    |
-note: ...can't outlive the lifetime '_ as defined on the method body at 13:14
-  --> $DIR/issue-63388-2.rs:13:14
+note: ...can't outlive the lifetime '_ as defined on the method body at 11:14
+  --> $DIR/issue-63388-2.rs:11:14
    |
 LL |         foo: &dyn Foo, bar: &'a dyn Foo
    |              ^
-help: you can add a constraint to the return type to make it last less than `'static` and match the lifetime '_ as defined on the method body at 13:14
+help: you can add a constraint to the return type to make it last less than `'static` and match the lifetime '_ as defined on the method body at 11:14
    |
 LL |     ) -> &dyn Foo + '_
    |          ^^^^^^^^^^^^^
diff --git a/src/test/ui/async-await/issues/issue-63388-3.rs b/src/test/ui/async-await/issues/issue-63388-3.rs
index 05f23f95965..1a9822e02fa 100644
--- a/src/test/ui/async-await/issues/issue-63388-3.rs
+++ b/src/test/ui/async-await/issues/issue-63388-3.rs
@@ -1,8 +1,6 @@
 // edition:2018
 // check-pass
 
-#![feature(async_await)]
-
 struct Xyz {
     a: u64,
 }
diff --git a/src/test/ui/async-await/issues/issue-63388-4.rs b/src/test/ui/async-await/issues/issue-63388-4.rs
index 0939242d7fc..58f9dacb3bc 100644
--- a/src/test/ui/async-await/issues/issue-63388-4.rs
+++ b/src/test/ui/async-await/issues/issue-63388-4.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 struct A;
 
 impl A {
diff --git a/src/test/ui/async-await/issues/non-async-enclosing-span.rs b/src/test/ui/async-await/issues/non-async-enclosing-span.rs
index 838911d9b6e..d47c2137725 100644
--- a/src/test/ui/async-await/issues/non-async-enclosing-span.rs
+++ b/src/test/ui/async-await/issues/non-async-enclosing-span.rs
@@ -1,5 +1,4 @@
 // edition:2018
-#![feature(async_await)]
 
 async fn do_the_thing() -> u8 {
     8
diff --git a/src/test/ui/async-await/issues/non-async-enclosing-span.stderr b/src/test/ui/async-await/issues/non-async-enclosing-span.stderr
index f492c1a8045..49ebf414c55 100644
--- a/src/test/ui/async-await/issues/non-async-enclosing-span.stderr
+++ b/src/test/ui/async-await/issues/non-async-enclosing-span.stderr
@@ -1,5 +1,5 @@
 error[E0728]: `await` is only allowed inside `async` functions and blocks
-  --> $DIR/non-async-enclosing-span.rs:10:13
+  --> $DIR/non-async-enclosing-span.rs:9:13
    |
 LL | fn main() {
    |    ---- this is not `async`
diff --git a/src/test/ui/async-await/move-part-await-return-rest-struct.rs b/src/test/ui/async-await/move-part-await-return-rest-struct.rs
index 9bd7a515cbd..39ea2aae563 100644
--- a/src/test/ui/async-await/move-part-await-return-rest-struct.rs
+++ b/src/test/ui/async-await/move-part-await-return-rest-struct.rs
@@ -2,8 +2,6 @@
 // edition:2018
 // compile-flags: --crate-type lib
 
-#![feature(async_await)]
-
 struct Small {
     x: Vec<usize>,
     y: Vec<usize>,
diff --git a/src/test/ui/async-await/move-part-await-return-rest-tuple.rs b/src/test/ui/async-await/move-part-await-return-rest-tuple.rs
index 69eee855e75..7b958b98b41 100644
--- a/src/test/ui/async-await/move-part-await-return-rest-tuple.rs
+++ b/src/test/ui/async-await/move-part-await-return-rest-tuple.rs
@@ -2,8 +2,6 @@
 // edition:2018
 // compile-flags: --crate-type lib
 
-#![feature(async_await)]
-
 async fn move_part_await_return_rest_tuple() -> Vec<usize> {
     let x = (vec![3], vec![4, 4]);
     drop(x.1);
diff --git a/src/test/ui/async-await/multiple-lifetimes/elided.rs b/src/test/ui/async-await/multiple-lifetimes/elided.rs
index 45f3170d4c3..8258e2eff52 100644
--- a/src/test/ui/async-await/multiple-lifetimes/elided.rs
+++ b/src/test/ui/async-await/multiple-lifetimes/elided.rs
@@ -3,8 +3,6 @@
 
 // Test that we can use async fns with multiple arbitrary lifetimes.
 
-#![feature(async_await)]
-
 async fn multiple_elided_lifetimes(_: &u8, _: &u8) {}
 
 fn main() {
diff --git a/src/test/ui/async-await/multiple-lifetimes/fn-ptr.rs b/src/test/ui/async-await/multiple-lifetimes/fn-ptr.rs
index a7254cee755..3912b854747 100644
--- a/src/test/ui/async-await/multiple-lifetimes/fn-ptr.rs
+++ b/src/test/ui/async-await/multiple-lifetimes/fn-ptr.rs
@@ -3,8 +3,6 @@
 
 // Test that we can use async fns with multiple arbitrary lifetimes.
 
-#![feature(async_await)]
-
 async fn multiple_named_lifetimes<'a, 'b>(_: &'a u8, _: &'b u8, _: fn(&u8)) {}
 
 fn gimme(_: &u8) { }
diff --git a/src/test/ui/async-await/multiple-lifetimes/hrtb.rs b/src/test/ui/async-await/multiple-lifetimes/hrtb.rs
index 589e260d084..31d0736ba63 100644
--- a/src/test/ui/async-await/multiple-lifetimes/hrtb.rs
+++ b/src/test/ui/async-await/multiple-lifetimes/hrtb.rs
@@ -3,9 +3,6 @@
 
 // Test that we can use async fns with multiple arbitrary lifetimes.
 
-#![feature(async_await)]
-#![allow(dead_code)]
-
 use std::ops::Add;
 
 async fn multiple_hrtb_and_single_named_lifetime_ok<'c>(
diff --git a/src/test/ui/async-await/multiple-lifetimes/named.rs b/src/test/ui/async-await/multiple-lifetimes/named.rs
index cd479e256b4..e8eb98102f4 100644
--- a/src/test/ui/async-await/multiple-lifetimes/named.rs
+++ b/src/test/ui/async-await/multiple-lifetimes/named.rs
@@ -3,8 +3,6 @@
 
 // Test that we can use async fns with multiple arbitrary lifetimes.
 
-#![feature(async_await)]
-
 async fn multiple_named_lifetimes<'a, 'b>(_: &'a u8, _: &'b u8) {}
 
 fn main() {
diff --git a/src/test/ui/async-await/multiple-lifetimes/partial-relation.rs b/src/test/ui/async-await/multiple-lifetimes/partial-relation.rs
index 903c43950a5..02b105999f5 100644
--- a/src/test/ui/async-await/multiple-lifetimes/partial-relation.rs
+++ b/src/test/ui/async-await/multiple-lifetimes/partial-relation.rs
@@ -1,8 +1,6 @@
 // edition:2018
 // run-pass
 
-#![feature(async_await)]
-
 async fn lotsa_lifetimes<'a, 'b, 'c>(a: &'a u32, b: &'b u32, c: &'c u32) -> (&'a u32, &'b u32)
     where 'b: 'a
 {
diff --git a/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-fg.rs b/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-fg.rs
index 08622311f7b..b901b61aa18 100644
--- a/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-fg.rs
+++ b/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-fg.rs
@@ -4,7 +4,7 @@
 // Test that a feature gate is needed to use `impl Trait` as the
 // return type of an async.
 
-#![feature(async_await, member_constraints)]
+#![feature(member_constraints)]
 
 trait Trait<'a, 'b> { }
 impl<T> Trait<'_, '_> for T { }
diff --git a/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-no-fg.rs b/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-no-fg.rs
index 08ecea4cc85..2c7a5cd378f 100644
--- a/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-no-fg.rs
+++ b/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-no-fg.rs
@@ -3,8 +3,6 @@
 // Test that a feature gate is needed to use `impl Trait` as the
 // return type of an async.
 
-#![feature(async_await)]
-
 trait Trait<'a, 'b> { }
 impl<T> Trait<'_, '_> for T { }
 
diff --git a/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-no-fg.stderr b/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-no-fg.stderr
index de2c85d772a..59d7728d41c 100644
--- a/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-no-fg.stderr
+++ b/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-no-fg.stderr
@@ -1,5 +1,5 @@
 error: ambiguous lifetime bound in `impl Trait`
-  --> $DIR/ret-impl-trait-no-fg.rs:11:64
+  --> $DIR/ret-impl-trait-no-fg.rs:9:64
    |
 LL | async fn async_ret_impl_trait<'a, 'b>(a: &'a u8, b: &'b u8) -> impl Trait<'a, 'b> {
    |                                                                ^^^^^^^^^^^^^^^^^^ neither `'a` nor `'b` outlives the other
diff --git a/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-one.rs b/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-one.rs
index e1b71465273..babc90a5e96 100644
--- a/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-one.rs
+++ b/src/test/ui/async-await/multiple-lifetimes/ret-impl-trait-one.rs
@@ -3,7 +3,7 @@
 // Test that a feature gate is needed to use `impl Trait` as the
 // return type of an async.
 
-#![feature(async_await, member_constraints)]
+#![feature(member_constraints)]
 
 trait Trait<'a> { }
 impl<T> Trait<'_> for T { }
diff --git a/src/test/ui/async-await/multiple-lifetimes/ret-ref.rs b/src/test/ui/async-await/multiple-lifetimes/ret-ref.rs
index 98da90161e5..149c020f9cb 100644
--- a/src/test/ui/async-await/multiple-lifetimes/ret-ref.rs
+++ b/src/test/ui/async-await/multiple-lifetimes/ret-ref.rs
@@ -4,8 +4,6 @@
 // function (which takes multiple lifetimes) only returns data from
 // one of them.
 
-#![feature(async_await)]
-
 async fn multiple_named_lifetimes<'a, 'b>(a: &'a u8, _: &'b u8) -> &'a u8 {
     a
 }
diff --git a/src/test/ui/async-await/multiple-lifetimes/ret-ref.stderr b/src/test/ui/async-await/multiple-lifetimes/ret-ref.stderr
index fe70d35942c..d86e84033b8 100644
--- a/src/test/ui/async-await/multiple-lifetimes/ret-ref.stderr
+++ b/src/test/ui/async-await/multiple-lifetimes/ret-ref.stderr
@@ -1,5 +1,5 @@
 error[E0506]: cannot assign to `a` because it is borrowed
-  --> $DIR/ret-ref.rs:18:5
+  --> $DIR/ret-ref.rs:16:5
    |
 LL |     let future = multiple_named_lifetimes(&a, &b);
    |                                           -- borrow of `a` occurs here
@@ -10,7 +10,7 @@ LL |     let p = future.await;
    |             ------ borrow later used here
 
 error[E0506]: cannot assign to `b` because it is borrowed
-  --> $DIR/ret-ref.rs:19:5
+  --> $DIR/ret-ref.rs:17:5
    |
 LL |     let future = multiple_named_lifetimes(&a, &b);
    |                                               -- borrow of `b` occurs here
@@ -21,7 +21,7 @@ LL |     let p = future.await;
    |             ------ borrow later used here
 
 error[E0506]: cannot assign to `a` because it is borrowed
-  --> $DIR/ret-ref.rs:30:5
+  --> $DIR/ret-ref.rs:28:5
    |
 LL |     let future = multiple_named_lifetimes(&a, &b);
    |                                           -- borrow of `a` occurs here
diff --git a/src/test/ui/async-await/multiple-lifetimes/variance.rs b/src/test/ui/async-await/multiple-lifetimes/variance.rs
index b52ad17d563..6ed8bef956a 100644
--- a/src/test/ui/async-await/multiple-lifetimes/variance.rs
+++ b/src/test/ui/async-await/multiple-lifetimes/variance.rs
@@ -4,9 +4,6 @@
 // Test for async fn where the parameters have distinct lifetime
 // parameters that appear in all possible variances.
 
-#![feature(async_await)]
-
-#[allow(dead_code)]
 async fn lotsa_lifetimes<'a, 'b, 'c>(_: fn(&'a u8), _: fn(&'b u8) -> &'b u8, _: fn() -> &'c u8) { }
 
 fn take_any(_: &u8) { }
diff --git a/src/test/ui/async-await/nested-in-impl.rs b/src/test/ui/async-await/nested-in-impl.rs
index 3c82160595f..76ed827d597 100644
--- a/src/test/ui/async-await/nested-in-impl.rs
+++ b/src/test/ui/async-await/nested-in-impl.rs
@@ -4,8 +4,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 struct Foo<'a>(&'a ());
 
 impl<'a> Foo<'a> {
diff --git a/src/test/ui/async-await/no-args-non-move-async-closure.rs b/src/test/ui/async-await/no-args-non-move-async-closure.rs
index 62d4b3fb6f2..0ca50807f26 100644
--- a/src/test/ui/async-await/no-args-non-move-async-closure.rs
+++ b/src/test/ui/async-await/no-args-non-move-async-closure.rs
@@ -1,6 +1,6 @@
 // edition:2018
 
-#![feature(async_await, async_closure)]
+#![feature(async_closure)]
 
 fn main() {
     let _ = async |x: u8| {};
diff --git a/src/test/ui/async-await/no-async-const.rs b/src/test/ui/async-await/no-async-const.rs
index 1db314a5aa2..7a6eb498b2e 100644
--- a/src/test/ui/async-await/no-async-const.rs
+++ b/src/test/ui/async-await/no-async-const.rs
@@ -2,7 +2,5 @@
 // edition:2018
 // compile-flags: --crate-type lib
 
-#![feature(async_await)]
-
 pub async const fn x() {}
 //~^ ERROR expected one of `fn` or `unsafe`, found `const`
diff --git a/src/test/ui/async-await/no-async-const.stderr b/src/test/ui/async-await/no-async-const.stderr
index cdb1c6e2d7b..edbdfb56522 100644
--- a/src/test/ui/async-await/no-async-const.stderr
+++ b/src/test/ui/async-await/no-async-const.stderr
@@ -1,5 +1,5 @@
 error: expected one of `fn` or `unsafe`, found `const`
-  --> $DIR/no-async-const.rs:7:11
+  --> $DIR/no-async-const.rs:5:11
    |
 LL | pub async const fn x() {}
    |           ^^^^^ expected one of `fn` or `unsafe` here
diff --git a/src/test/ui/async-await/no-const-async.rs b/src/test/ui/async-await/no-const-async.rs
index 9f09d2188c7..bd78a18a40e 100644
--- a/src/test/ui/async-await/no-const-async.rs
+++ b/src/test/ui/async-await/no-const-async.rs
@@ -2,8 +2,6 @@
 // edition:2018
 // compile-flags: --crate-type lib
 
-#![feature(async_await)]
-
 pub const async fn x() {}
 //~^ ERROR expected identifier, found reserved keyword `async`
 //~^^ expected `:`, found keyword `fn`
diff --git a/src/test/ui/async-await/no-const-async.stderr b/src/test/ui/async-await/no-const-async.stderr
index 693fbf186f9..6d7df57e7b6 100644
--- a/src/test/ui/async-await/no-const-async.stderr
+++ b/src/test/ui/async-await/no-const-async.stderr
@@ -1,5 +1,5 @@
 error: expected identifier, found reserved keyword `async`
-  --> $DIR/no-const-async.rs:7:11
+  --> $DIR/no-const-async.rs:5:11
    |
 LL | pub const async fn x() {}
    |           ^^^^^ expected identifier, found reserved keyword
@@ -9,7 +9,7 @@ LL | pub const r#async fn x() {}
    |           ^^^^^^^
 
 error: expected `:`, found keyword `fn`
-  --> $DIR/no-const-async.rs:7:17
+  --> $DIR/no-const-async.rs:5:17
    |
 LL | pub const async fn x() {}
    |                 ^^ expected `:`
diff --git a/src/test/ui/async-await/no-move-across-await-struct.rs b/src/test/ui/async-await/no-move-across-await-struct.rs
index 58e09470897..bef477bd256 100644
--- a/src/test/ui/async-await/no-move-across-await-struct.rs
+++ b/src/test/ui/async-await/no-move-across-await-struct.rs
@@ -2,8 +2,6 @@
 // edition:2018
 // compile-flags: --crate-type lib
 
-#![feature(async_await)]
-
 async fn no_move_across_await_struct() -> Vec<usize> {
     let s = Small { x: vec![31], y: vec![19, 1441] };
     needs_vec(s.x).await;
diff --git a/src/test/ui/async-await/no-move-across-await-struct.stderr b/src/test/ui/async-await/no-move-across-await-struct.stderr
index 121c7791bd9..88f147b8d9d 100644
--- a/src/test/ui/async-await/no-move-across-await-struct.stderr
+++ b/src/test/ui/async-await/no-move-across-await-struct.stderr
@@ -1,5 +1,5 @@
 error[E0382]: use of moved value: `s.x`
-  --> $DIR/no-move-across-await-struct.rs:10:5
+  --> $DIR/no-move-across-await-struct.rs:8:5
    |
 LL |     needs_vec(s.x).await;
    |               --- value moved here
diff --git a/src/test/ui/async-await/no-move-across-await-tuple.rs b/src/test/ui/async-await/no-move-across-await-tuple.rs
index 5d3ed3da1e3..565cbd7d5f4 100644
--- a/src/test/ui/async-await/no-move-across-await-tuple.rs
+++ b/src/test/ui/async-await/no-move-across-await-tuple.rs
@@ -2,8 +2,6 @@
 // edition:2018
 // compile-flags: --crate-type lib
 
-#![feature(async_await)]
-
 async fn no_move_across_await_tuple() -> Vec<usize> {
     let x = (vec![3], vec![4, 4]);
     drop(x.1);
diff --git a/src/test/ui/async-await/no-move-across-await-tuple.stderr b/src/test/ui/async-await/no-move-across-await-tuple.stderr
index 5da037ea5c0..fe98ecd599a 100644
--- a/src/test/ui/async-await/no-move-across-await-tuple.stderr
+++ b/src/test/ui/async-await/no-move-across-await-tuple.stderr
@@ -1,5 +1,5 @@
 error[E0382]: use of moved value: `x.1`
-  --> $DIR/no-move-across-await-tuple.rs:11:5
+  --> $DIR/no-move-across-await-tuple.rs:9:5
    |
 LL |     drop(x.1);
    |          --- value moved here
diff --git a/src/test/ui/async-await/no-non-guaranteed-initialization.rs b/src/test/ui/async-await/no-non-guaranteed-initialization.rs
index a916afb6b09..0afbf4cee1d 100644
--- a/src/test/ui/async-await/no-non-guaranteed-initialization.rs
+++ b/src/test/ui/async-await/no-non-guaranteed-initialization.rs
@@ -2,8 +2,6 @@
 // edition:2018
 // compile-flags: --crate-type lib
 
-#![feature(async_await)]
-
 async fn no_non_guaranteed_initialization(x: usize) -> usize {
     let y;
     if x > 5 {
diff --git a/src/test/ui/async-await/no-non-guaranteed-initialization.stderr b/src/test/ui/async-await/no-non-guaranteed-initialization.stderr
index fb94522cac0..91d7994654f 100644
--- a/src/test/ui/async-await/no-non-guaranteed-initialization.stderr
+++ b/src/test/ui/async-await/no-non-guaranteed-initialization.stderr
@@ -1,5 +1,5 @@
 error[E0381]: use of possibly uninitialized variable: `y`
-  --> $DIR/no-non-guaranteed-initialization.rs:12:5
+  --> $DIR/no-non-guaranteed-initialization.rs:10:5
    |
 LL |     y
    |     ^ use of possibly uninitialized `y`
diff --git a/src/test/ui/async-await/partial-initialization-across-await.rs b/src/test/ui/async-await/partial-initialization-across-await.rs
index 40f9f5202e7..1785fb7f299 100644
--- a/src/test/ui/async-await/partial-initialization-across-await.rs
+++ b/src/test/ui/async-await/partial-initialization-across-await.rs
@@ -3,8 +3,6 @@
 
 // edition:2018
 
-#![feature(async_await)]
-
 struct S { x: i32, y: i32 }
 struct T(i32, i32);
 
diff --git a/src/test/ui/async-await/partial-initialization-across-await.stderr b/src/test/ui/async-await/partial-initialization-across-await.stderr
index fe79eb08bef..d9a2db985e5 100644
--- a/src/test/ui/async-await/partial-initialization-across-await.stderr
+++ b/src/test/ui/async-await/partial-initialization-across-await.stderr
@@ -1,17 +1,17 @@
 error[E0381]: assign to part of possibly uninitialized variable: `t`
-  --> $DIR/partial-initialization-across-await.rs:15:5
+  --> $DIR/partial-initialization-across-await.rs:13:5
    |
 LL |     t.0 = 42;
    |     ^^^^^^^^ use of possibly uninitialized `t`
 
 error[E0381]: assign to part of possibly uninitialized variable: `t`
-  --> $DIR/partial-initialization-across-await.rs:24:5
+  --> $DIR/partial-initialization-across-await.rs:22:5
    |
 LL |     t.0 = 42;
    |     ^^^^^^^^ use of possibly uninitialized `t`
 
 error[E0381]: assign to part of possibly uninitialized variable: `t`
-  --> $DIR/partial-initialization-across-await.rs:33:5
+  --> $DIR/partial-initialization-across-await.rs:31:5
    |
 LL |     t.x = 42;
    |     ^^^^^^^^ use of possibly uninitialized `t`
diff --git a/src/test/ui/async-await/recursive-async-impl-trait-type.rs b/src/test/ui/async-await/recursive-async-impl-trait-type.rs
index 54f3339870b..aa773319458 100644
--- a/src/test/ui/async-await/recursive-async-impl-trait-type.rs
+++ b/src/test/ui/async-await/recursive-async-impl-trait-type.rs
@@ -2,8 +2,6 @@
 // Test that impl trait does not allow creating recursive types that are
 // otherwise forbidden when using `async` and `await`.
 
-#![feature(async_await)]
-
 async fn recursive_async_function() -> () { //~ ERROR
     recursive_async_function().await;
 }
diff --git a/src/test/ui/async-await/recursive-async-impl-trait-type.stderr b/src/test/ui/async-await/recursive-async-impl-trait-type.stderr
index 64f6eccd547..8781a9c444d 100644
--- a/src/test/ui/async-await/recursive-async-impl-trait-type.stderr
+++ b/src/test/ui/async-await/recursive-async-impl-trait-type.stderr
@@ -1,5 +1,5 @@
 error[E0733]: recursion in an `async fn` requires boxing
-  --> $DIR/recursive-async-impl-trait-type.rs:7:40
+  --> $DIR/recursive-async-impl-trait-type.rs:5:40
    |
 LL | async fn recursive_async_function() -> () {
    |                                        ^^ an `async fn` cannot invoke itself directly
diff --git a/src/test/ui/async-await/suggest-missing-await-closure.fixed b/src/test/ui/async-await/suggest-missing-await-closure.fixed
index 60c9a8581ac..37b30ffe680 100644
--- a/src/test/ui/async-await/suggest-missing-await-closure.fixed
+++ b/src/test/ui/async-await/suggest-missing-await-closure.fixed
@@ -1,7 +1,7 @@
 // edition:2018
 // run-rustfix
 
-#![feature(async_await, async_closure)]
+#![feature(async_closure)]
 
 fn take_u32(_x: u32) {}
 
diff --git a/src/test/ui/async-await/suggest-missing-await-closure.rs b/src/test/ui/async-await/suggest-missing-await-closure.rs
index cb992a27bc1..18076a15161 100644
--- a/src/test/ui/async-await/suggest-missing-await-closure.rs
+++ b/src/test/ui/async-await/suggest-missing-await-closure.rs
@@ -1,7 +1,7 @@
 // edition:2018
 // run-rustfix
 
-#![feature(async_await, async_closure)]
+#![feature(async_closure)]
 
 fn take_u32(_x: u32) {}
 
diff --git a/src/test/ui/async-await/suggest-missing-await.fixed b/src/test/ui/async-await/suggest-missing-await.fixed
index aa032682be8..7c02a907ce7 100644
--- a/src/test/ui/async-await/suggest-missing-await.fixed
+++ b/src/test/ui/async-await/suggest-missing-await.fixed
@@ -1,8 +1,6 @@
 // edition:2018
 // run-rustfix
 
-#![feature(async_await)]
-
 fn take_u32(_x: u32) {}
 
 async fn make_u32() -> u32 {
diff --git a/src/test/ui/async-await/suggest-missing-await.rs b/src/test/ui/async-await/suggest-missing-await.rs
index 2ca814fbb22..91abd44e65c 100644
--- a/src/test/ui/async-await/suggest-missing-await.rs
+++ b/src/test/ui/async-await/suggest-missing-await.rs
@@ -1,8 +1,6 @@
 // edition:2018
 // run-rustfix
 
-#![feature(async_await)]
-
 fn take_u32(_x: u32) {}
 
 async fn make_u32() -> u32 {
diff --git a/src/test/ui/async-await/suggest-missing-await.stderr b/src/test/ui/async-await/suggest-missing-await.stderr
index 9bae7150276..ccca97ec204 100644
--- a/src/test/ui/async-await/suggest-missing-await.stderr
+++ b/src/test/ui/async-await/suggest-missing-await.stderr
@@ -1,5 +1,5 @@
 error[E0308]: mismatched types
-  --> $DIR/suggest-missing-await.rs:15:14
+  --> $DIR/suggest-missing-await.rs:13:14
    |
 LL |     take_u32(x)
    |              ^
diff --git a/src/test/ui/async-await/unresolved_type_param.rs b/src/test/ui/async-await/unresolved_type_param.rs
index 578d41fe0df..d8ea87d2775 100644
--- a/src/test/ui/async-await/unresolved_type_param.rs
+++ b/src/test/ui/async-await/unresolved_type_param.rs
@@ -2,7 +2,7 @@
 // Error message should pinpoint the type parameter T as needing to be bound
 // (rather than give a general error message)
 // edition:2018
-#![feature(async_await)]
+
 async fn bar<T>() -> () {}
 
 async fn foo() {
diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.rs b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.rs
new file mode 100644
index 00000000000..4281874a031
--- /dev/null
+++ b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.rs
@@ -0,0 +1,16 @@
+const fn bad_const_fn_deref_raw(x: *mut usize) -> &'static usize { unsafe { &*x } } //~ is unsafe
+//~^ dereferencing raw pointers in constant functions
+
+const unsafe fn bad_const_unsafe_deref_raw(x: *mut usize) -> usize { *x }
+//~^ dereferencing raw pointers in constant functions
+
+const unsafe fn bad_const_unsafe_deref_raw_ref(x: *mut usize) -> &'static usize { &*x }
+//~^ dereferencing raw pointers in constant functions
+
+fn main() {}
+
+const unsafe fn no_union() {
+    union Foo { x: (), y: () }
+    Foo { x: () }.y
+    //~^ unions in const fn
+}
diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe.stderr b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.stderr
index d3f2ece1f92..9de0e732f33 100644
--- a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe.stderr
+++ b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.stderr
@@ -1,5 +1,5 @@
 error[E0658]: dereferencing raw pointers in constant functions is unstable
-  --> $DIR/min_const_fn_unsafe.rs:50:77
+  --> $DIR/min_const_fn_unsafe_bad.rs:1:77
    |
 LL | const fn bad_const_fn_deref_raw(x: *mut usize) -> &'static usize { unsafe { &*x } }
    |                                                                             ^^^
@@ -8,7 +8,7 @@ LL | const fn bad_const_fn_deref_raw(x: *mut usize) -> &'static usize { unsafe {
    = help: add `#![feature(const_raw_ptr_deref)]` to the crate attributes to enable
 
 error[E0658]: dereferencing raw pointers in constant functions is unstable
-  --> $DIR/min_const_fn_unsafe.rs:53:70
+  --> $DIR/min_const_fn_unsafe_bad.rs:4:70
    |
 LL | const unsafe fn bad_const_unsafe_deref_raw(x: *mut usize) -> usize { *x }
    |                                                                      ^^
@@ -17,7 +17,7 @@ LL | const unsafe fn bad_const_unsafe_deref_raw(x: *mut usize) -> usize { *x }
    = help: add `#![feature(const_raw_ptr_deref)]` to the crate attributes to enable
 
 error[E0658]: dereferencing raw pointers in constant functions is unstable
-  --> $DIR/min_const_fn_unsafe.rs:56:83
+  --> $DIR/min_const_fn_unsafe_bad.rs:7:83
    |
 LL | const unsafe fn bad_const_unsafe_deref_raw_ref(x: *mut usize) -> &'static usize { &*x }
    |                                                                                   ^^^
@@ -26,7 +26,7 @@ LL | const unsafe fn bad_const_unsafe_deref_raw_ref(x: *mut usize) -> &'static u
    = help: add `#![feature(const_raw_ptr_deref)]` to the crate attributes to enable
 
 error[E0658]: unions in const fn are unstable
-  --> $DIR/min_const_fn_unsafe.rs:63:5
+  --> $DIR/min_const_fn_unsafe_bad.rs:14:5
    |
 LL |     Foo { x: () }.y
    |     ^^^^^^^^^^^^^^^
@@ -35,7 +35,7 @@ LL |     Foo { x: () }.y
    = help: add `#![feature(const_fn_union)]` to the crate attributes to enable
 
 error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
-  --> $DIR/min_const_fn_unsafe.rs:50:77
+  --> $DIR/min_const_fn_unsafe_bad.rs:1:77
    |
 LL | const fn bad_const_fn_deref_raw(x: *mut usize) -> &'static usize { unsafe { &*x } }
    |                                                                             ^^^ dereference of raw pointer
diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe.rs b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_ok.rs
index 0152561aefc..02c7970deca 100644
--- a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe.rs
+++ b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_ok.rs
@@ -1,6 +1,4 @@
-//------------------------------------------------------------------------------
-// OK
-//------------------------------------------------------------------------------
+// check-pass
 
 const unsafe fn ret_i32_no_unsafe() -> i32 { 42 }
 const unsafe fn ret_null_ptr_no_unsafe<T>() -> *const T { std::ptr::null() }
@@ -43,23 +41,4 @@ const unsafe fn call_unsafe_generic_cell_const_unsafe_fn_immediate()
     ret_null_mut_ptr_no_unsafe::<Vec<std::cell::Cell<u32>>>()
 }
 
-//------------------------------------------------------------------------------
-// NOT OK
-//------------------------------------------------------------------------------
-
-const fn bad_const_fn_deref_raw(x: *mut usize) -> &'static usize { unsafe { &*x } } //~ is unsafe
-//~^ dereferencing raw pointers in constant functions
-
-const unsafe fn bad_const_unsafe_deref_raw(x: *mut usize) -> usize { *x }
-//~^ dereferencing raw pointers in constant functions
-
-const unsafe fn bad_const_unsafe_deref_raw_ref(x: *mut usize) -> &'static usize { &*x }
-//~^ dereferencing raw pointers in constant functions
-
 fn main() {}
-
-const unsafe fn no_union() {
-    union Foo { x: (), y: () }
-    Foo { x: () }.y
-    //~^ unions in const fn
-}
diff --git a/src/test/ui/drop/dynamic-drop-async.rs b/src/test/ui/drop/dynamic-drop-async.rs
index f3f5c382275..79d09d18176 100644
--- a/src/test/ui/drop/dynamic-drop-async.rs
+++ b/src/test/ui/drop/dynamic-drop-async.rs
@@ -7,10 +7,7 @@
 // edition:2018
 // ignore-wasm32-bare compiled with panic=abort by default
 
-#![allow(unused_assignments)]
-#![allow(unused_variables)]
 #![feature(slice_patterns)]
-#![feature(async_await)]
 
 use std::{
     cell::{Cell, RefCell},
diff --git a/src/test/ui/feature-gates/feature-gate-async-await-2015-edition.rs b/src/test/ui/feature-gates/feature-gate-async-await-2015-edition.rs
deleted file mode 100644
index 801aeb82aa2..00000000000
--- a/src/test/ui/feature-gates/feature-gate-async-await-2015-edition.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-// edition:2015
-
-async fn foo() {} //~ ERROR `async fn` is not permitted in the 2015 edition
-                  //~^ ERROR async fn is unstable
-
-fn main() {
-    let _ = async {}; //~ ERROR cannot find struct, variant or union type `async`
-    let _ = async || { true }; //~ ERROR cannot find value `async` in this scope
-}
diff --git a/src/test/ui/feature-gates/feature-gate-async-await-2015-edition.stderr b/src/test/ui/feature-gates/feature-gate-async-await-2015-edition.stderr
deleted file mode 100644
index 0157ed55344..00000000000
--- a/src/test/ui/feature-gates/feature-gate-async-await-2015-edition.stderr
+++ /dev/null
@@ -1,31 +0,0 @@
-error[E0670]: `async fn` is not permitted in the 2015 edition
-  --> $DIR/feature-gate-async-await-2015-edition.rs:3:1
-   |
-LL | async fn foo() {}
-   | ^^^^^
-
-error[E0422]: cannot find struct, variant or union type `async` in this scope
-  --> $DIR/feature-gate-async-await-2015-edition.rs:7:13
-   |
-LL |     let _ = async {};
-   |             ^^^^^ not found in this scope
-
-error[E0425]: cannot find value `async` in this scope
-  --> $DIR/feature-gate-async-await-2015-edition.rs:8:13
-   |
-LL |     let _ = async || { true };
-   |             ^^^^^ not found in this scope
-
-error[E0658]: async fn is unstable
-  --> $DIR/feature-gate-async-await-2015-edition.rs:3:1
-   |
-LL | async fn foo() {}
-   | ^^^^^^^^^^^^^^^^^
-   |
-   = note: for more information, see https://github.com/rust-lang/rust/issues/50547
-   = help: add `#![feature(async_await)]` to the crate attributes to enable
-
-error: aborting due to 4 previous errors
-
-Some errors have detailed explanations: E0422, E0425, E0658, E0670.
-For more information about an error, try `rustc --explain E0422`.
diff --git a/src/test/ui/feature-gates/feature-gate-async-await.rs b/src/test/ui/feature-gates/feature-gate-async-await.rs
deleted file mode 100644
index 78391c0e104..00000000000
--- a/src/test/ui/feature-gates/feature-gate-async-await.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// edition:2018
-
-struct S;
-
-impl S {
-    async fn foo() {} //~ ERROR async fn is unstable
-}
-
-trait T {
-    async fn foo(); //~ ERROR trait fns cannot be declared `async`
-    //~^ ERROR async fn is unstable
-}
-
-async fn foo() {} //~ ERROR async fn is unstable
-
-fn main() {
-    let _ = async {}; //~ ERROR async blocks are unstable
-}
diff --git a/src/test/ui/feature-gates/feature-gate-async-await.stderr b/src/test/ui/feature-gates/feature-gate-async-await.stderr
deleted file mode 100644
index 9f4a90157a4..00000000000
--- a/src/test/ui/feature-gates/feature-gate-async-await.stderr
+++ /dev/null
@@ -1,45 +0,0 @@
-error[E0706]: trait fns cannot be declared `async`
-  --> $DIR/feature-gate-async-await.rs:10:5
-   |
-LL |     async fn foo();
-   |     ^^^^^^^^^^^^^^^
-
-error[E0658]: async fn is unstable
-  --> $DIR/feature-gate-async-await.rs:6:5
-   |
-LL |     async fn foo() {}
-   |     ^^^^^^^^^^^^^^^^^
-   |
-   = note: for more information, see https://github.com/rust-lang/rust/issues/50547
-   = help: add `#![feature(async_await)]` to the crate attributes to enable
-
-error[E0658]: async fn is unstable
-  --> $DIR/feature-gate-async-await.rs:10:5
-   |
-LL |     async fn foo();
-   |     ^^^^^^^^^^^^^^^
-   |
-   = note: for more information, see https://github.com/rust-lang/rust/issues/50547
-   = help: add `#![feature(async_await)]` to the crate attributes to enable
-
-error[E0658]: async fn is unstable
-  --> $DIR/feature-gate-async-await.rs:14:1
-   |
-LL | async fn foo() {}
-   | ^^^^^^^^^^^^^^^^^
-   |
-   = note: for more information, see https://github.com/rust-lang/rust/issues/50547
-   = help: add `#![feature(async_await)]` to the crate attributes to enable
-
-error[E0658]: async blocks are unstable
-  --> $DIR/feature-gate-async-await.rs:17:13
-   |
-LL |     let _ = async {};
-   |             ^^^^^^^^
-   |
-   = note: for more information, see https://github.com/rust-lang/rust/issues/50547
-   = help: add `#![feature(async_await)]` to the crate attributes to enable
-
-error: aborting due to 5 previous errors
-
-For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/generator/issue-61442-stmt-expr-with-drop.rs b/src/test/ui/generator/issue-61442-stmt-expr-with-drop.rs
index ce4642020f0..e3d19029348 100644
--- a/src/test/ui/generator/issue-61442-stmt-expr-with-drop.rs
+++ b/src/test/ui/generator/issue-61442-stmt-expr-with-drop.rs
@@ -4,7 +4,7 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await, generators, generator_trait)]
+#![feature(generators, generator_trait)]
 
 use std::ops::Generator;
 
diff --git a/src/test/ui/generator/issue-62506-two_awaits.rs b/src/test/ui/generator/issue-62506-two_awaits.rs
index 774019b6a5b..672e16b780d 100644
--- a/src/test/ui/generator/issue-62506-two_awaits.rs
+++ b/src/test/ui/generator/issue-62506-two_awaits.rs
@@ -4,7 +4,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
 use std::future::Future;
 
 pub trait T {
diff --git a/src/test/ui/impl-trait/bound-normalization-fail.rs b/src/test/ui/impl-trait/bound-normalization-fail.rs
index ce1550568c1..235c1f80ef6 100644
--- a/src/test/ui/impl-trait/bound-normalization-fail.rs
+++ b/src/test/ui/impl-trait/bound-normalization-fail.rs
@@ -2,7 +2,6 @@
 // ignore-tidy-linelength
 // edition:2018
 
-#![feature(async_await)]
 #![feature(impl_trait_in_bindings)]
 //~^ WARNING the feature `impl_trait_in_bindings` is incomplete
 
diff --git a/src/test/ui/impl-trait/bound-normalization-fail.stderr b/src/test/ui/impl-trait/bound-normalization-fail.stderr
index 4811b1e0ff3..2c4c61a0957 100644
--- a/src/test/ui/impl-trait/bound-normalization-fail.stderr
+++ b/src/test/ui/impl-trait/bound-normalization-fail.stderr
@@ -1,5 +1,5 @@
 warning: the feature `impl_trait_in_bindings` is incomplete and may cause the compiler to crash
-  --> $DIR/bound-normalization-fail.rs:6:12
+  --> $DIR/bound-normalization-fail.rs:5:12
    |
 LL | #![feature(impl_trait_in_bindings)]
    |            ^^^^^^^^^^^^^^^^^^^^^^
@@ -7,7 +7,7 @@ LL | #![feature(impl_trait_in_bindings)]
    = note: `#[warn(incomplete_features)]` on by default
 
 error[E0271]: type mismatch resolving `<Foo<()> as FooLike>::Output == <T as impl_trait::Trait>::Assoc`
-  --> $DIR/bound-normalization-fail.rs:29:32
+  --> $DIR/bound-normalization-fail.rs:28:32
    |
 LL |     fn foo_fail<T: Trait>() -> impl FooLike<Output=T::Assoc> {
    |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected (), found associated type
@@ -17,13 +17,13 @@ LL |     fn foo_fail<T: Trait>() -> impl FooLike<Output=T::Assoc> {
    = note: the return type of a function must have a statically known size
 
 error: `impl Trait` return type cannot contain a projection or `Self` that references lifetimes from a parent scope
-  --> $DIR/bound-normalization-fail.rs:45:41
+  --> $DIR/bound-normalization-fail.rs:44:41
    |
 LL |     fn foo2_fail<'a, T: Trait<'a>>() -> impl FooLike<Output=T::Assoc> {
    |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0271]: type mismatch resolving `<Foo<()> as FooLike>::Output == <T as lifetimes::Trait<'static>>::Assoc`
-  --> $DIR/bound-normalization-fail.rs:45:41
+  --> $DIR/bound-normalization-fail.rs:44:41
    |
 LL |     fn foo2_fail<'a, T: Trait<'a>>() -> impl FooLike<Output=T::Assoc> {
    |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected (), found associated type
diff --git a/src/test/ui/impl-trait/bound-normalization-pass.rs b/src/test/ui/impl-trait/bound-normalization-pass.rs
index b0ed4be54b8..fff17667fda 100644
--- a/src/test/ui/impl-trait/bound-normalization-pass.rs
+++ b/src/test/ui/impl-trait/bound-normalization-pass.rs
@@ -1,7 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
 #![feature(type_alias_impl_trait)]
 #![feature(impl_trait_in_bindings)]
 //~^ WARNING the feature `impl_trait_in_bindings` is incomplete
diff --git a/src/test/ui/impl-trait/bound-normalization-pass.stderr b/src/test/ui/impl-trait/bound-normalization-pass.stderr
index 229acdb2b14..d048da7f60b 100644
--- a/src/test/ui/impl-trait/bound-normalization-pass.stderr
+++ b/src/test/ui/impl-trait/bound-normalization-pass.stderr
@@ -1,5 +1,5 @@
 warning: the feature `impl_trait_in_bindings` is incomplete and may cause the compiler to crash
-  --> $DIR/bound-normalization-pass.rs:6:12
+  --> $DIR/bound-normalization-pass.rs:5:12
    |
 LL | #![feature(impl_trait_in_bindings)]
    |            ^^^^^^^^^^^^^^^^^^^^^^
diff --git a/src/test/ui/impl-trait/issue-55872-2.rs b/src/test/ui/impl-trait/issue-55872-2.rs
index dfee20ca649..1ca2e3d9065 100644
--- a/src/test/ui/impl-trait/issue-55872-2.rs
+++ b/src/test/ui/impl-trait/issue-55872-2.rs
@@ -1,6 +1,7 @@
 // edition:2018
 // ignore-tidy-linelength
-#![feature(async_await, type_alias_impl_trait)]
+
+#![feature(type_alias_impl_trait)]
 
 pub trait Bar {
     type E: Copy;
diff --git a/src/test/ui/impl-trait/issue-55872-2.stderr b/src/test/ui/impl-trait/issue-55872-2.stderr
index 676c3fe3d4c..01371b4d5c6 100644
--- a/src/test/ui/impl-trait/issue-55872-2.stderr
+++ b/src/test/ui/impl-trait/issue-55872-2.stderr
@@ -1,5 +1,5 @@
 error[E0277]: the trait bound `impl std::future::Future: std::marker::Copy` is not satisfied
-  --> $DIR/issue-55872-2.rs:12:5
+  --> $DIR/issue-55872-2.rs:13:5
    |
 LL |     type E = impl Copy;
    |     ^^^^^^^^^^^^^^^^^^^ the trait `std::marker::Copy` is not implemented for `impl std::future::Future`
@@ -7,7 +7,7 @@ LL |     type E = impl Copy;
    = note: the return type of a function must have a statically known size
 
 error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias
-  --> $DIR/issue-55872-2.rs:14:28
+  --> $DIR/issue-55872-2.rs:15:28
    |
 LL |       fn foo<T>() -> Self::E {
    |  ____________________________^
diff --git a/src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.rs b/src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.rs
index 30ed5050433..7d75f254bfe 100644
--- a/src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.rs
+++ b/src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.rs
@@ -1,5 +1,4 @@
 // edition:2018
-#![feature(async_await)]
 #![feature(impl_trait_in_bindings)]
 //~^ WARN the feature `impl_trait_in_bindings` is incomplete and may cause the compiler to crash
 
diff --git a/src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.stderr b/src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.stderr
index 67a834a2e95..f67e45b01d2 100644
--- a/src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.stderr
+++ b/src/test/ui/inference/cannot-infer-async-enabled-impl-trait-bindings.stderr
@@ -1,5 +1,5 @@
 warning: the feature `impl_trait_in_bindings` is incomplete and may cause the compiler to crash
-  --> $DIR/cannot-infer-async-enabled-impl-trait-bindings.rs:3:12
+  --> $DIR/cannot-infer-async-enabled-impl-trait-bindings.rs:2:12
    |
 LL | #![feature(impl_trait_in_bindings)]
    |            ^^^^^^^^^^^^^^^^^^^^^^
@@ -7,7 +7,7 @@ LL | #![feature(impl_trait_in_bindings)]
    = note: `#[warn(incomplete_features)]` on by default
 
 error[E0282]: type annotations needed for `impl std::future::Future`
-  --> $DIR/cannot-infer-async-enabled-impl-trait-bindings.rs:14:9
+  --> $DIR/cannot-infer-async-enabled-impl-trait-bindings.rs:13:9
    |
 LL |     let fut = async {
    |         --- consider giving `fut` the explicit type `impl std::future::Future`, with the type parameters specified
diff --git a/src/test/ui/inference/cannot-infer-async.rs b/src/test/ui/inference/cannot-infer-async.rs
index edc64276e7c..05f62f3d8cb 100644
--- a/src/test/ui/inference/cannot-infer-async.rs
+++ b/src/test/ui/inference/cannot-infer-async.rs
@@ -1,5 +1,4 @@
 // edition:2018
-#![feature(async_await)]
 
 use std::io::Error;
 
diff --git a/src/test/ui/inference/cannot-infer-async.stderr b/src/test/ui/inference/cannot-infer-async.stderr
index 36608a11bb7..bf31fb85cf6 100644
--- a/src/test/ui/inference/cannot-infer-async.stderr
+++ b/src/test/ui/inference/cannot-infer-async.stderr
@@ -1,5 +1,5 @@
 error[E0282]: type annotations needed
-  --> $DIR/cannot-infer-async.rs:12:9
+  --> $DIR/cannot-infer-async.rs:11:9
    |
 LL |     let fut = async {
    |         --- consider giving `fut` a type
diff --git a/src/test/ui/issues/issue-31776.rs b/src/test/ui/issues/issue-31776.rs
index c0d2c91e577..c86623ce289 100644
--- a/src/test/ui/issues/issue-31776.rs
+++ b/src/test/ui/issues/issue-31776.rs
@@ -13,7 +13,7 @@ mod m {
     }
 }
 
-// ------------------------------------------------------
+// Scenario 1
 
 pub trait Tr {
     type A;
@@ -28,7 +28,7 @@ fn f() {
     }
 }
 
-// ------------------------------------------------------
+// Scenario 2
 
 trait Tr1 {
     type A;
@@ -49,8 +49,6 @@ mod m1 {
     }
 }
 
-// ------------------------------------------------------
-
 fn main() {
     S.s(); // Privacy error, unless `fn s` is pub
     let a = S2.pull().field; // Privacy error unless `field: u8` is pub
diff --git a/src/test/ui/issues/issue-50415.rs b/src/test/ui/issues/issue-50415.rs
index 20c7be772f9..151b9fe442c 100644
--- a/src/test/ui/issues/issue-50415.rs
+++ b/src/test/ui/issues/issue-50415.rs
@@ -1,11 +1,9 @@
 // run-pass
 fn main() {
-    // -------- Simplified test case --------
-
+    // Simplified test case
     let _ = || 0..=1;
 
-    // -------- Original test case --------
-
+    // Original test case
     let full_length = 1024;
     let range = {
         // do some stuff, omit here
diff --git a/src/test/ui/issues/issue-5067.rs b/src/test/ui/issues/issue-5067.rs
index 616fd09907a..5857a081596 100644
--- a/src/test/ui/issues/issue-5067.rs
+++ b/src/test/ui/issues/issue-5067.rs
@@ -54,7 +54,7 @@ macro_rules! foo {
     //~^ ERROR repetition matches empty token tree
 }
 
-// --- Original Issue --- //
+// Original Issue
 
 macro_rules! make_vec {
     (a $e1:expr $($(, a $e2:expr)*)*) => ([$e1 $($(, $e2)*)*]);
@@ -65,7 +65,7 @@ fn main() {
     let _ = make_vec![a 1, a 2, a 3];
 }
 
-// --- Minified Issue --- //
+// Minified Issue
 
 macro_rules! m {
     ( $()* ) => {};
diff --git a/src/test/ui/lint/lint-unused-mut-variables.rs b/src/test/ui/lint/lint-unused-mut-variables.rs
index 2957f931110..f140546b048 100644
--- a/src/test/ui/lint/lint-unused-mut-variables.rs
+++ b/src/test/ui/lint/lint-unused-mut-variables.rs
@@ -3,7 +3,7 @@
 // Exercise the unused_mut attribute in some positive and negative cases
 
 #![deny(unused_mut)]
-#![feature(async_await, async_closure, param_attrs)]
+#![feature(async_closure, param_attrs)]
 
 async fn baz_async(
     mut a: i32,
diff --git a/src/test/ui/lint/lint-unused-variables.rs b/src/test/ui/lint/lint-unused-variables.rs
index a1660d23511..06b818636f9 100644
--- a/src/test/ui/lint/lint-unused-variables.rs
+++ b/src/test/ui/lint/lint-unused-variables.rs
@@ -1,7 +1,7 @@
 // compile-flags: --cfg something
 // edition:2018
 
-#![feature(async_await, async_closure, param_attrs)]
+#![feature(async_closure, param_attrs)]
 #![deny(unused_variables)]
 
 async fn foo_async(
diff --git a/src/test/ui/macros/restricted-shadowing-modern.rs b/src/test/ui/macros/restricted-shadowing-modern.rs
index a8818507d75..1151a829eba 100644
--- a/src/test/ui/macros/restricted-shadowing-modern.rs
+++ b/src/test/ui/macros/restricted-shadowing-modern.rs
@@ -95,8 +95,6 @@ macro include() {
         m!()
     }
 
-    // -----------------------------------------------------------
-
     fn check1() {
         macro m() {}
         {
diff --git a/src/test/ui/macros/restricted-shadowing-modern.stderr b/src/test/ui/macros/restricted-shadowing-modern.stderr
index d147debeb51..12075d42b9a 100644
--- a/src/test/ui/macros/restricted-shadowing-modern.stderr
+++ b/src/test/ui/macros/restricted-shadowing-modern.stderr
@@ -1,5 +1,5 @@
 error[E0659]: `m` is ambiguous (macro-expanded name vs less macro-expanded name from outer scope during import/macro resolution)
-  --> $DIR/restricted-shadowing-modern.rs:106:17
+  --> $DIR/restricted-shadowing-modern.rs:104:17
    |
 LL |                 m!();
    |                 ^ ambiguous name
@@ -16,7 +16,7 @@ LL |         macro m() { Right }
 LL | include!();
    | ----------- in this macro invocation
 note: `m` could also refer to the macro defined here
-  --> $DIR/restricted-shadowing-modern.rs:101:9
+  --> $DIR/restricted-shadowing-modern.rs:99:9
    |
 LL |         macro m() {}
    |         ^^^^^^^^^^^^
@@ -25,7 +25,7 @@ LL | include!();
    | ----------- in this macro invocation
 
 error[E0659]: `m` is ambiguous (macro-expanded name vs less macro-expanded name from outer scope during import/macro resolution)
-  --> $DIR/restricted-shadowing-modern.rs:149:33
+  --> $DIR/restricted-shadowing-modern.rs:147:33
    |
 LL |             macro gen_invoc() { m!() }
    |                                 ^ ambiguous name
@@ -42,7 +42,7 @@ LL |         macro m() { Right }
 LL | include!();
    | ----------- in this macro invocation
 note: `m` could also refer to the macro defined here
-  --> $DIR/restricted-shadowing-modern.rs:145:9
+  --> $DIR/restricted-shadowing-modern.rs:143:9
    |
 LL |         macro m() {}
    |         ^^^^^^^^^^^^
@@ -51,7 +51,7 @@ LL | include!();
    | ----------- in this macro invocation
 
 error[E0659]: `m` is ambiguous (macro-expanded name vs less macro-expanded name from outer scope during import/macro resolution)
-  --> $DIR/restricted-shadowing-modern.rs:158:13
+  --> $DIR/restricted-shadowing-modern.rs:156:13
    |
 LL |             m!();
    |             ^ ambiguous name
@@ -68,7 +68,7 @@ LL |         macro m() { Right }
 LL | include!();
    | ----------- in this macro invocation
 note: `m` could also refer to the macro defined here
-  --> $DIR/restricted-shadowing-modern.rs:155:9
+  --> $DIR/restricted-shadowing-modern.rs:153:9
    |
 LL |         macro m() {}
    |         ^^^^^^^^^^^^
@@ -77,7 +77,7 @@ LL | include!();
    | ----------- in this macro invocation
 
 error[E0659]: `m` is ambiguous (macro-expanded name vs less macro-expanded name from outer scope during import/macro resolution)
-  --> $DIR/restricted-shadowing-modern.rs:174:13
+  --> $DIR/restricted-shadowing-modern.rs:172:13
    |
 LL |             m!();
    |             ^ ambiguous name
@@ -103,7 +103,7 @@ LL | include!();
    | ----------- in this macro invocation
 
 error[E0659]: `m` is ambiguous (macro-expanded name vs less macro-expanded name from outer scope during import/macro resolution)
-  --> $DIR/restricted-shadowing-modern.rs:192:17
+  --> $DIR/restricted-shadowing-modern.rs:190:17
    |
 LL |                 m!();
    |                 ^ ambiguous name
@@ -129,7 +129,7 @@ LL | include!();
    | ----------- in this macro invocation
 
 error[E0659]: `m` is ambiguous (macro-expanded name vs less macro-expanded name from outer scope during import/macro resolution)
-  --> $DIR/restricted-shadowing-modern.rs:235:33
+  --> $DIR/restricted-shadowing-modern.rs:233:33
    |
 LL |             macro gen_invoc() { m!() }
    |                                 ^ ambiguous name
diff --git a/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.migrate.nll.stderr b/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.migrate.nll.stderr
index 867eafe2529..4944f2649b7 100644
--- a/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.migrate.nll.stderr
+++ b/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.migrate.nll.stderr
@@ -1,5 +1,5 @@
 error: lifetime may not live long enough
-  --> $DIR/regions-assoc-type-in-supertrait-outlives-container.rs:43:12
+  --> $DIR/regions-assoc-type-in-supertrait-outlives-container.rs:39:12
    |
 LL | fn with_assoc<'a,'b>() {
    |               -- -- lifetime `'b` defined here
diff --git a/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.migrate.stderr b/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.migrate.stderr
index f31f25bf00b..61be0778c99 100644
--- a/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.migrate.stderr
+++ b/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.migrate.stderr
@@ -1,16 +1,16 @@
 error[E0491]: in type `&'a WithAssoc<TheType<'b>>`, reference has a longer lifetime than the data it references
-  --> $DIR/regions-assoc-type-in-supertrait-outlives-container.rs:43:12
+  --> $DIR/regions-assoc-type-in-supertrait-outlives-container.rs:39:12
    |
 LL |     let _: &'a WithAssoc<TheType<'b>> = loop { };
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-note: the pointer is valid for the lifetime 'a as defined on the function body at 37:15
-  --> $DIR/regions-assoc-type-in-supertrait-outlives-container.rs:37:15
+note: the pointer is valid for the lifetime 'a as defined on the function body at 33:15
+  --> $DIR/regions-assoc-type-in-supertrait-outlives-container.rs:33:15
    |
 LL | fn with_assoc<'a,'b>() {
    |               ^^
-note: but the referenced data is only valid for the lifetime 'b as defined on the function body at 37:18
-  --> $DIR/regions-assoc-type-in-supertrait-outlives-container.rs:37:18
+note: but the referenced data is only valid for the lifetime 'b as defined on the function body at 33:18
+  --> $DIR/regions-assoc-type-in-supertrait-outlives-container.rs:33:18
    |
 LL | fn with_assoc<'a,'b>() {
    |                  ^^
diff --git a/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.nll.stderr b/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.nll.stderr
index 867eafe2529..4944f2649b7 100644
--- a/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.nll.stderr
+++ b/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.nll.stderr
@@ -1,5 +1,5 @@
 error: lifetime may not live long enough
-  --> $DIR/regions-assoc-type-in-supertrait-outlives-container.rs:43:12
+  --> $DIR/regions-assoc-type-in-supertrait-outlives-container.rs:39:12
    |
 LL | fn with_assoc<'a,'b>() {
    |               -- -- lifetime `'b` defined here
diff --git a/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.rs b/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.rs
index 97c55593600..046d010002e 100644
--- a/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.rs
+++ b/src/test/ui/regions/regions-assoc-type-in-supertrait-outlives-container.rs
@@ -8,8 +8,6 @@
 
 #![allow(dead_code)]
 
-///////////////////////////////////////////////////////////////////////////
-
 pub trait TheTrait {
     type TheAssocType;
 }
@@ -28,8 +26,6 @@ impl<'b> TheTrait for TheType<'b> {
 impl<'b> TheSubTrait for TheType<'b> {
 }
 
-///////////////////////////////////////////////////////////////////////////
-
 pub struct WithAssoc<T:TheSubTrait> {
     m: [T; 0]
 }
diff --git a/src/test/ui/rfc-2565-param-attrs/param-attrs-cfg.rs b/src/test/ui/rfc-2565-param-attrs/param-attrs-cfg.rs
index 069332ffa25..5ad6e23cf2a 100644
--- a/src/test/ui/rfc-2565-param-attrs/param-attrs-cfg.rs
+++ b/src/test/ui/rfc-2565-param-attrs/param-attrs-cfg.rs
@@ -1,7 +1,7 @@
 // compile-flags: --cfg something
 // edition:2018
 
-#![feature(async_await, async_closure, param_attrs)]
+#![feature(async_closure, param_attrs)]
 #![deny(unused_variables)]
 
 extern "C" {
diff --git a/src/test/ui/self/arbitrary_self_types_pin_lifetime-async.rs b/src/test/ui/self/arbitrary_self_types_pin_lifetime-async.rs
index b853f88a96d..f3474bc1f9f 100644
--- a/src/test/ui/self/arbitrary_self_types_pin_lifetime-async.rs
+++ b/src/test/ui/self/arbitrary_self_types_pin_lifetime-async.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 use std::pin::Pin;
 use std::task::{Context, Poll};
 
diff --git a/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.nll.stderr b/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.nll.stderr
index 2421632c664..a585b4fdbe6 100644
--- a/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.nll.stderr
+++ b/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.nll.stderr
@@ -1,5 +1,5 @@
 error: lifetime may not live long enough
-  --> $DIR/arbitrary_self_types_pin_lifetime_impl_trait-async.rs:10:48
+  --> $DIR/arbitrary_self_types_pin_lifetime_impl_trait-async.rs:8:48
    |
 LL |     async fn f(self: Pin<&Self>) -> impl Clone { self }
    |                          -                     ^^^^^^^^ returning this value requires that `'_` must outlive `'static`
diff --git a/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.rs b/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.rs
index aecb82325c1..0afe631f1e3 100644
--- a/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.rs
+++ b/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 use std::pin::Pin;
 
 struct Foo;
diff --git a/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.stderr b/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.stderr
index f0032449db1..2fb152475a1 100644
--- a/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.stderr
+++ b/src/test/ui/self/arbitrary_self_types_pin_lifetime_impl_trait-async.stderr
@@ -1,17 +1,17 @@
 error: cannot infer an appropriate lifetime
-  --> $DIR/arbitrary_self_types_pin_lifetime_impl_trait-async.rs:10:16
+  --> $DIR/arbitrary_self_types_pin_lifetime_impl_trait-async.rs:8:16
    |
 LL |     async fn f(self: Pin<&Self>) -> impl Clone { self }
    |                ^^^^                 ---------- this return type evaluates to the `'static` lifetime...
    |                |
    |                ...but this borrow...
    |
-note: ...can't outlive the lifetime '_ as defined on the method body at 10:26
-  --> $DIR/arbitrary_self_types_pin_lifetime_impl_trait-async.rs:10:26
+note: ...can't outlive the lifetime '_ as defined on the method body at 8:26
+  --> $DIR/arbitrary_self_types_pin_lifetime_impl_trait-async.rs:8:26
    |
 LL |     async fn f(self: Pin<&Self>) -> impl Clone { self }
    |                          ^
-help: you can add a constraint to the return type to make it last less than `'static` and match the lifetime '_ as defined on the method body at 10:26
+help: you can add a constraint to the return type to make it last less than `'static` and match the lifetime '_ as defined on the method body at 8:26
    |
 LL |     async fn f(self: Pin<&Self>) -> impl Clone + '_ { self }
    |                                     ^^^^^^^^^^^^^^^
diff --git a/src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.nll.stderr b/src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.nll.stderr
index e33001b9244..e53d91c3604 100644
--- a/src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.nll.stderr
+++ b/src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.nll.stderr
@@ -1,5 +1,5 @@
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:10:45
+  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:8:45
    |
 LL |     async fn a(self: Pin<&Foo>, f: &Foo) -> &Foo { f }
    |                                             ^^^^
@@ -7,7 +7,7 @@ LL |     async fn a(self: Pin<&Foo>, f: &Foo) -> &Foo { f }
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:10:50
+  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:8:50
    |
 LL |     async fn a(self: Pin<&Foo>, f: &Foo) -> &Foo { f }
    |                          -                       ^^^^^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
@@ -16,7 +16,7 @@ LL |     async fn a(self: Pin<&Foo>, f: &Foo) -> &Foo { f }
    |                          lifetime `'_` defined here
 
 error: lifetime may not live long enough
-  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:13:73
+  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:11:73
    |
 LL |     async fn c(self: Pin<&Self>, f: &Foo, g: &Foo) -> (Pin<&Foo>, &Foo) { (self, f) }
    |                          -                                              ^^^^^^^^^^^^^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
@@ -25,7 +25,7 @@ LL |     async fn c(self: Pin<&Self>, f: &Foo, g: &Foo) -> (Pin<&Foo>, &Foo) { (
    |                          lifetime `'_` defined here
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:19:58
+  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:17:58
    |
 LL |     async fn bar<'a>(self: Alias<&Self>, arg: &'a ()) -> &() { arg }
    |                                                          ^^^
@@ -33,7 +33,7 @@ LL |     async fn bar<'a>(self: Alias<&Self>, arg: &'a ()) -> &() { arg }
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:19:62
+  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:17:62
    |
 LL |     async fn bar<'a>(self: Alias<&Self>, arg: &'a ()) -> &() { arg }
    |                  --              -                           ^^^^^^^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'a`
diff --git a/src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.rs b/src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.rs
index 53ab75ee16b..f42337d5340 100644
--- a/src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.rs
+++ b/src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 use std::pin::Pin;
 
 struct Foo;
diff --git a/src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.stderr b/src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.stderr
index 74fc4741349..57ad026bdcf 100644
--- a/src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.stderr
+++ b/src/test/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.stderr
@@ -1,5 +1,5 @@
 error[E0623]: lifetime mismatch
-  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:10:45
+  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:8:45
    |
 LL |     async fn a(self: Pin<&Foo>, f: &Foo) -> &Foo { f }
    |                          ----               ^^^^
@@ -8,7 +8,7 @@ LL |     async fn a(self: Pin<&Foo>, f: &Foo) -> &Foo { f }
    |                          this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:13:55
+  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:11:55
    |
 LL |     async fn c(self: Pin<&Self>, f: &Foo, g: &Foo) -> (Pin<&Foo>, &Foo) { (self, f) }
    |                          -----                        ^^^^^^^^^^^^^^^^^
@@ -17,7 +17,7 @@ LL |     async fn c(self: Pin<&Self>, f: &Foo, g: &Foo) -> (Pin<&Foo>, &Foo) { (
    |                          this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:19:58
+  --> $DIR/arbitrary_self_types_pin_lifetime_mismatch-async.rs:17:58
    |
 LL |     async fn bar<'a>(self: Alias<&Self>, arg: &'a ()) -> &() { arg }
    |                                  -----                   ^^^
diff --git a/src/test/ui/self/elision/alias-async.rs b/src/test/ui/self/elision/alias-async.rs
index 3d5b24a8946..9743c139096 100644
--- a/src/test/ui/self/elision/alias-async.rs
+++ b/src/test/ui/self/elision/alias-async.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/assoc-async.rs b/src/test/ui/self/elision/assoc-async.rs
index 0f33f288772..fa5968de5ac 100644
--- a/src/test/ui/self/elision/assoc-async.rs
+++ b/src/test/ui/self/elision/assoc-async.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/lt-alias-async.rs b/src/test/ui/self/elision/lt-alias-async.rs
index 5a8989f078e..cc5badaaa6e 100644
--- a/src/test/ui/self/elision/lt-alias-async.rs
+++ b/src/test/ui/self/elision/lt-alias-async.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/lt-assoc-async.rs b/src/test/ui/self/elision/lt-assoc-async.rs
index 98c9aa3b6c2..f060800e4da 100644
--- a/src/test/ui/self/elision/lt-assoc-async.rs
+++ b/src/test/ui/self/elision/lt-assoc-async.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/lt-ref-self-async.nll.stderr b/src/test/ui/self/elision/lt-ref-self-async.nll.stderr
index 3e58c973019..998178dde1d 100644
--- a/src/test/ui/self/elision/lt-ref-self-async.nll.stderr
+++ b/src/test/ui/self/elision/lt-ref-self-async.nll.stderr
@@ -1,5 +1,5 @@
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/lt-ref-self-async.rs:15:42
+  --> $DIR/lt-ref-self-async.rs:13:42
    |
 LL |     async fn ref_self(&self, f: &u32) -> &u32 {
    |                                          ^^^^
@@ -7,7 +7,7 @@ LL |     async fn ref_self(&self, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#23r
 
 error: lifetime may not live long enough
-  --> $DIR/lt-ref-self-async.rs:15:47
+  --> $DIR/lt-ref-self-async.rs:13:47
    |
 LL |       async fn ref_self(&self, f: &u32) -> &u32 {
    |  _______________________-_______________________^
@@ -19,7 +19,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/lt-ref-self-async.rs:21:48
+  --> $DIR/lt-ref-self-async.rs:19:48
    |
 LL |     async fn ref_Self(self: &Self, f: &u32) -> &u32 {
    |                                                ^^^^
@@ -27,7 +27,7 @@ LL |     async fn ref_Self(self: &Self, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#23r
 
 error: lifetime may not live long enough
-  --> $DIR/lt-ref-self-async.rs:21:53
+  --> $DIR/lt-ref-self-async.rs:19:53
    |
 LL |       async fn ref_Self(self: &Self, f: &u32) -> &u32 {
    |  _____________________________-_______________________^
@@ -39,7 +39,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/lt-ref-self-async.rs:25:57
+  --> $DIR/lt-ref-self-async.rs:23:57
    |
 LL |     async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
    |                                                         ^^^^
@@ -47,7 +47,7 @@ LL |     async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#23r
 
 error: lifetime may not live long enough
-  --> $DIR/lt-ref-self-async.rs:25:62
+  --> $DIR/lt-ref-self-async.rs:23:62
    |
 LL |       async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
    |  _____________________________________-________________________^
@@ -59,7 +59,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/lt-ref-self-async.rs:29:57
+  --> $DIR/lt-ref-self-async.rs:27:57
    |
 LL |     async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
    |                                                         ^^^^
@@ -67,7 +67,7 @@ LL |     async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#23r
 
 error: lifetime may not live long enough
-  --> $DIR/lt-ref-self-async.rs:29:62
+  --> $DIR/lt-ref-self-async.rs:27:62
    |
 LL |       async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
    |  _____________________________________-________________________^
@@ -79,7 +79,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/lt-ref-self-async.rs:33:66
+  --> $DIR/lt-ref-self-async.rs:31:66
    |
 LL |     async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
    |                                                                  ^^^^
@@ -87,7 +87,7 @@ LL |     async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#23r
 
 error: lifetime may not live long enough
-  --> $DIR/lt-ref-self-async.rs:33:71
+  --> $DIR/lt-ref-self-async.rs:31:71
    |
 LL |       async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
    |  _____________________________________________-_________________________^
@@ -99,7 +99,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/lt-ref-self-async.rs:37:62
+  --> $DIR/lt-ref-self-async.rs:35:62
    |
 LL |     async fn box_pin_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
    |                                                              ^^^^
@@ -107,7 +107,7 @@ LL |     async fn box_pin_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#23r
 
 error: lifetime may not live long enough
-  --> $DIR/lt-ref-self-async.rs:37:67
+  --> $DIR/lt-ref-self-async.rs:35:67
    |
 LL |       async fn box_pin_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
    |  _________________________________________-_________________________^
diff --git a/src/test/ui/self/elision/lt-ref-self-async.rs b/src/test/ui/self/elision/lt-ref-self-async.rs
index 79a4771978a..e3ca0c2e2dd 100644
--- a/src/test/ui/self/elision/lt-ref-self-async.rs
+++ b/src/test/ui/self/elision/lt-ref-self-async.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/lt-ref-self-async.stderr b/src/test/ui/self/elision/lt-ref-self-async.stderr
index 0a459257fa7..2bc64bdf1f7 100644
--- a/src/test/ui/self/elision/lt-ref-self-async.stderr
+++ b/src/test/ui/self/elision/lt-ref-self-async.stderr
@@ -1,5 +1,5 @@
 error[E0623]: lifetime mismatch
-  --> $DIR/lt-ref-self-async.rs:15:42
+  --> $DIR/lt-ref-self-async.rs:13:42
    |
 LL |     async fn ref_self(&self, f: &u32) -> &u32 {
    |                       -----              ^^^^
@@ -8,7 +8,7 @@ LL |     async fn ref_self(&self, f: &u32) -> &u32 {
    |                       this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/lt-ref-self-async.rs:21:48
+  --> $DIR/lt-ref-self-async.rs:19:48
    |
 LL |     async fn ref_Self(self: &Self, f: &u32) -> &u32 {
    |                             -----              ^^^^
@@ -17,7 +17,7 @@ LL |     async fn ref_Self(self: &Self, f: &u32) -> &u32 {
    |                             this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/lt-ref-self-async.rs:25:57
+  --> $DIR/lt-ref-self-async.rs:23:57
    |
 LL |     async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
    |                                     -----               ^^^^
@@ -26,7 +26,7 @@ LL |     async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
    |                                     this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/lt-ref-self-async.rs:29:57
+  --> $DIR/lt-ref-self-async.rs:27:57
    |
 LL |     async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
    |                                     -----               ^^^^
@@ -35,7 +35,7 @@ LL |     async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
    |                                     this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/lt-ref-self-async.rs:33:66
+  --> $DIR/lt-ref-self-async.rs:31:66
    |
 LL |     async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
    |                                             -----                ^^^^
@@ -44,7 +44,7 @@ LL |     async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
    |                                             this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/lt-ref-self-async.rs:37:62
+  --> $DIR/lt-ref-self-async.rs:35:62
    |
 LL |     async fn box_pin_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
    |                                         -----                ^^^^
diff --git a/src/test/ui/self/elision/lt-self-async.rs b/src/test/ui/self/elision/lt-self-async.rs
index 0202db8a635..42647b82ef8 100644
--- a/src/test/ui/self/elision/lt-self-async.rs
+++ b/src/test/ui/self/elision/lt-self-async.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/lt-struct-async.rs b/src/test/ui/self/elision/lt-struct-async.rs
index c0fc63d4232..dc5a53b89d7 100644
--- a/src/test/ui/self/elision/lt-struct-async.rs
+++ b/src/test/ui/self/elision/lt-struct-async.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/multiple-ref-self-async.rs b/src/test/ui/self/elision/multiple-ref-self-async.rs
index eb8c25277e1..be073c6edba 100644
--- a/src/test/ui/self/elision/multiple-ref-self-async.rs
+++ b/src/test/ui/self/elision/multiple-ref-self-async.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/ref-alias-async.rs b/src/test/ui/self/elision/ref-alias-async.rs
index acc4b2153ef..4b02c2fd00c 100644
--- a/src/test/ui/self/elision/ref-alias-async.rs
+++ b/src/test/ui/self/elision/ref-alias-async.rs
@@ -1,8 +1,6 @@
 // edition:2018
 // check-pass
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/ref-assoc-async.rs b/src/test/ui/self/elision/ref-assoc-async.rs
index a6b6cbd6da3..258e27b7cb3 100644
--- a/src/test/ui/self/elision/ref-assoc-async.rs
+++ b/src/test/ui/self/elision/ref-assoc-async.rs
@@ -1,8 +1,6 @@
 // edition:2018
 // check-pass
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/ref-mut-alias-async.rs b/src/test/ui/self/elision/ref-mut-alias-async.rs
index 873e92bc6d3..5f9ccf3bc7f 100644
--- a/src/test/ui/self/elision/ref-mut-alias-async.rs
+++ b/src/test/ui/self/elision/ref-mut-alias-async.rs
@@ -1,7 +1,6 @@
 // edition:2018
 // check-pass
 
-#![feature(async_await)]
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/ref-mut-self-async.nll.stderr b/src/test/ui/self/elision/ref-mut-self-async.nll.stderr
index b8a53808810..97bc80509df 100644
--- a/src/test/ui/self/elision/ref-mut-self-async.nll.stderr
+++ b/src/test/ui/self/elision/ref-mut-self-async.nll.stderr
@@ -1,5 +1,5 @@
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-mut-self-async.rs:15:46
+  --> $DIR/ref-mut-self-async.rs:13:46
    |
 LL |     async fn ref_self(&mut self, f: &u32) -> &u32 {
    |                                              ^^^^
@@ -7,7 +7,7 @@ LL |     async fn ref_self(&mut self, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-mut-self-async.rs:15:51
+  --> $DIR/ref-mut-self-async.rs:13:51
    |
 LL |       async fn ref_self(&mut self, f: &u32) -> &u32 {
    |  _______________________-___________________________^
@@ -19,7 +19,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-mut-self-async.rs:21:52
+  --> $DIR/ref-mut-self-async.rs:19:52
    |
 LL |     async fn ref_Self(self: &mut Self, f: &u32) -> &u32 {
    |                                                    ^^^^
@@ -27,7 +27,7 @@ LL |     async fn ref_Self(self: &mut Self, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-mut-self-async.rs:21:57
+  --> $DIR/ref-mut-self-async.rs:19:57
    |
 LL |       async fn ref_Self(self: &mut Self, f: &u32) -> &u32 {
    |  _____________________________-___________________________^
@@ -39,7 +39,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-mut-self-async.rs:25:61
+  --> $DIR/ref-mut-self-async.rs:23:61
    |
 LL |     async fn box_ref_Self(self: Box<&mut Self>, f: &u32) -> &u32 {
    |                                                             ^^^^
@@ -47,7 +47,7 @@ LL |     async fn box_ref_Self(self: Box<&mut Self>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-mut-self-async.rs:25:66
+  --> $DIR/ref-mut-self-async.rs:23:66
    |
 LL |       async fn box_ref_Self(self: Box<&mut Self>, f: &u32) -> &u32 {
    |  _____________________________________-____________________________^
@@ -59,7 +59,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-mut-self-async.rs:29:61
+  --> $DIR/ref-mut-self-async.rs:27:61
    |
 LL |     async fn pin_ref_Self(self: Pin<&mut Self>, f: &u32) -> &u32 {
    |                                                             ^^^^
@@ -67,7 +67,7 @@ LL |     async fn pin_ref_Self(self: Pin<&mut Self>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-mut-self-async.rs:29:66
+  --> $DIR/ref-mut-self-async.rs:27:66
    |
 LL |       async fn pin_ref_Self(self: Pin<&mut Self>, f: &u32) -> &u32 {
    |  _____________________________________-____________________________^
@@ -79,7 +79,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-mut-self-async.rs:33:70
+  --> $DIR/ref-mut-self-async.rs:31:70
    |
 LL |     async fn box_box_ref_Self(self: Box<Box<&mut Self>>, f: &u32) -> &u32 {
    |                                                                      ^^^^
@@ -87,7 +87,7 @@ LL |     async fn box_box_ref_Self(self: Box<Box<&mut Self>>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-mut-self-async.rs:33:75
+  --> $DIR/ref-mut-self-async.rs:31:75
    |
 LL |       async fn box_box_ref_Self(self: Box<Box<&mut Self>>, f: &u32) -> &u32 {
    |  _____________________________________________-_____________________________^
@@ -99,7 +99,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-mut-self-async.rs:37:70
+  --> $DIR/ref-mut-self-async.rs:35:70
    |
 LL |     async fn box_pin_ref_Self(self: Box<Pin<&mut Self>>, f: &u32) -> &u32 {
    |                                                                      ^^^^
@@ -107,7 +107,7 @@ LL |     async fn box_pin_ref_Self(self: Box<Pin<&mut Self>>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-mut-self-async.rs:37:75
+  --> $DIR/ref-mut-self-async.rs:35:75
    |
 LL |       async fn box_pin_ref_Self(self: Box<Pin<&mut Self>>, f: &u32) -> &u32 {
    |  _____________________________________________-_____________________________^
diff --git a/src/test/ui/self/elision/ref-mut-self-async.rs b/src/test/ui/self/elision/ref-mut-self-async.rs
index a6bd9d69316..2ca14800a75 100644
--- a/src/test/ui/self/elision/ref-mut-self-async.rs
+++ b/src/test/ui/self/elision/ref-mut-self-async.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/ref-mut-self-async.stderr b/src/test/ui/self/elision/ref-mut-self-async.stderr
index 805833f9472..39a1b30ca53 100644
--- a/src/test/ui/self/elision/ref-mut-self-async.stderr
+++ b/src/test/ui/self/elision/ref-mut-self-async.stderr
@@ -1,5 +1,5 @@
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-mut-self-async.rs:15:46
+  --> $DIR/ref-mut-self-async.rs:13:46
    |
 LL |     async fn ref_self(&mut self, f: &u32) -> &u32 {
    |                       ---------              ^^^^
@@ -8,7 +8,7 @@ LL |     async fn ref_self(&mut self, f: &u32) -> &u32 {
    |                       this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-mut-self-async.rs:21:52
+  --> $DIR/ref-mut-self-async.rs:19:52
    |
 LL |     async fn ref_Self(self: &mut Self, f: &u32) -> &u32 {
    |                             ---------              ^^^^
@@ -17,7 +17,7 @@ LL |     async fn ref_Self(self: &mut Self, f: &u32) -> &u32 {
    |                             this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-mut-self-async.rs:25:61
+  --> $DIR/ref-mut-self-async.rs:23:61
    |
 LL |     async fn box_ref_Self(self: Box<&mut Self>, f: &u32) -> &u32 {
    |                                     ---------               ^^^^
@@ -26,7 +26,7 @@ LL |     async fn box_ref_Self(self: Box<&mut Self>, f: &u32) -> &u32 {
    |                                     this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-mut-self-async.rs:29:61
+  --> $DIR/ref-mut-self-async.rs:27:61
    |
 LL |     async fn pin_ref_Self(self: Pin<&mut Self>, f: &u32) -> &u32 {
    |                                     ---------               ^^^^
@@ -35,7 +35,7 @@ LL |     async fn pin_ref_Self(self: Pin<&mut Self>, f: &u32) -> &u32 {
    |                                     this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-mut-self-async.rs:33:70
+  --> $DIR/ref-mut-self-async.rs:31:70
    |
 LL |     async fn box_box_ref_Self(self: Box<Box<&mut Self>>, f: &u32) -> &u32 {
    |                                             ---------                ^^^^
@@ -44,7 +44,7 @@ LL |     async fn box_box_ref_Self(self: Box<Box<&mut Self>>, f: &u32) -> &u32 {
    |                                             this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-mut-self-async.rs:37:70
+  --> $DIR/ref-mut-self-async.rs:35:70
    |
 LL |     async fn box_pin_ref_Self(self: Box<Pin<&mut Self>>, f: &u32) -> &u32 {
    |                                             ---------                ^^^^
diff --git a/src/test/ui/self/elision/ref-mut-struct-async.nll.stderr b/src/test/ui/self/elision/ref-mut-struct-async.nll.stderr
index cee008de667..2905a022e5d 100644
--- a/src/test/ui/self/elision/ref-mut-struct-async.nll.stderr
+++ b/src/test/ui/self/elision/ref-mut-struct-async.nll.stderr
@@ -1,5 +1,5 @@
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-mut-struct-async.rs:15:56
+  --> $DIR/ref-mut-struct-async.rs:13:56
    |
 LL |     async fn ref_Struct(self: &mut Struct, f: &u32) -> &u32 {
    |                                                        ^^^^
@@ -7,7 +7,7 @@ LL |     async fn ref_Struct(self: &mut Struct, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-mut-struct-async.rs:15:61
+  --> $DIR/ref-mut-struct-async.rs:13:61
    |
 LL |       async fn ref_Struct(self: &mut Struct, f: &u32) -> &u32 {
    |  _______________________________-_____________________________^
@@ -19,7 +19,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-mut-struct-async.rs:19:65
+  --> $DIR/ref-mut-struct-async.rs:17:65
    |
 LL |     async fn box_ref_Struct(self: Box<&mut Struct>, f: &u32) -> &u32 {
    |                                                                 ^^^^
@@ -27,7 +27,7 @@ LL |     async fn box_ref_Struct(self: Box<&mut Struct>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-mut-struct-async.rs:19:70
+  --> $DIR/ref-mut-struct-async.rs:17:70
    |
 LL |       async fn box_ref_Struct(self: Box<&mut Struct>, f: &u32) -> &u32 {
    |  _______________________________________-______________________________^
@@ -39,7 +39,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-mut-struct-async.rs:23:65
+  --> $DIR/ref-mut-struct-async.rs:21:65
    |
 LL |     async fn pin_ref_Struct(self: Pin<&mut Struct>, f: &u32) -> &u32 {
    |                                                                 ^^^^
@@ -47,7 +47,7 @@ LL |     async fn pin_ref_Struct(self: Pin<&mut Struct>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-mut-struct-async.rs:23:70
+  --> $DIR/ref-mut-struct-async.rs:21:70
    |
 LL |       async fn pin_ref_Struct(self: Pin<&mut Struct>, f: &u32) -> &u32 {
    |  _______________________________________-______________________________^
@@ -59,7 +59,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-mut-struct-async.rs:27:74
+  --> $DIR/ref-mut-struct-async.rs:25:74
    |
 LL |     async fn box_box_ref_Struct(self: Box<Box<&mut Struct>>, f: &u32) -> &u32 {
    |                                                                          ^^^^
@@ -67,7 +67,7 @@ LL |     async fn box_box_ref_Struct(self: Box<Box<&mut Struct>>, f: &u32) -> &u
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-mut-struct-async.rs:27:79
+  --> $DIR/ref-mut-struct-async.rs:25:79
    |
 LL |       async fn box_box_ref_Struct(self: Box<Box<&mut Struct>>, f: &u32) -> &u32 {
    |  _______________________________________________-_______________________________^
@@ -79,7 +79,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-mut-struct-async.rs:31:74
+  --> $DIR/ref-mut-struct-async.rs:29:74
    |
 LL |     async fn box_pin_ref_Struct(self: Box<Pin<&mut Struct>>, f: &u32) -> &u32 {
    |                                                                          ^^^^
@@ -87,7 +87,7 @@ LL |     async fn box_pin_ref_Struct(self: Box<Pin<&mut Struct>>, f: &u32) -> &u
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-mut-struct-async.rs:31:79
+  --> $DIR/ref-mut-struct-async.rs:29:79
    |
 LL |       async fn box_pin_ref_Struct(self: Box<Pin<&mut Struct>>, f: &u32) -> &u32 {
    |  _______________________________________________-_______________________________^
diff --git a/src/test/ui/self/elision/ref-mut-struct-async.rs b/src/test/ui/self/elision/ref-mut-struct-async.rs
index 7a89ef9596a..a671116de25 100644
--- a/src/test/ui/self/elision/ref-mut-struct-async.rs
+++ b/src/test/ui/self/elision/ref-mut-struct-async.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/ref-mut-struct-async.stderr b/src/test/ui/self/elision/ref-mut-struct-async.stderr
index 4c983872942..fe4a636ada6 100644
--- a/src/test/ui/self/elision/ref-mut-struct-async.stderr
+++ b/src/test/ui/self/elision/ref-mut-struct-async.stderr
@@ -1,5 +1,5 @@
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-mut-struct-async.rs:15:56
+  --> $DIR/ref-mut-struct-async.rs:13:56
    |
 LL |     async fn ref_Struct(self: &mut Struct, f: &u32) -> &u32 {
    |                               -----------              ^^^^
@@ -8,7 +8,7 @@ LL |     async fn ref_Struct(self: &mut Struct, f: &u32) -> &u32 {
    |                               this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-mut-struct-async.rs:19:65
+  --> $DIR/ref-mut-struct-async.rs:17:65
    |
 LL |     async fn box_ref_Struct(self: Box<&mut Struct>, f: &u32) -> &u32 {
    |                                       -----------               ^^^^
@@ -17,7 +17,7 @@ LL |     async fn box_ref_Struct(self: Box<&mut Struct>, f: &u32) -> &u32 {
    |                                       this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-mut-struct-async.rs:23:65
+  --> $DIR/ref-mut-struct-async.rs:21:65
    |
 LL |     async fn pin_ref_Struct(self: Pin<&mut Struct>, f: &u32) -> &u32 {
    |                                       -----------               ^^^^
@@ -26,7 +26,7 @@ LL |     async fn pin_ref_Struct(self: Pin<&mut Struct>, f: &u32) -> &u32 {
    |                                       this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-mut-struct-async.rs:27:74
+  --> $DIR/ref-mut-struct-async.rs:25:74
    |
 LL |     async fn box_box_ref_Struct(self: Box<Box<&mut Struct>>, f: &u32) -> &u32 {
    |                                               -----------                ^^^^
@@ -35,7 +35,7 @@ LL |     async fn box_box_ref_Struct(self: Box<Box<&mut Struct>>, f: &u32) -> &u
    |                                               this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-mut-struct-async.rs:31:74
+  --> $DIR/ref-mut-struct-async.rs:29:74
    |
 LL |     async fn box_pin_ref_Struct(self: Box<Pin<&mut Struct>>, f: &u32) -> &u32 {
    |                                               -----------                ^^^^
diff --git a/src/test/ui/self/elision/ref-self-async.nll.stderr b/src/test/ui/self/elision/ref-self-async.nll.stderr
index c3c15485b22..0eee56654f7 100644
--- a/src/test/ui/self/elision/ref-self-async.nll.stderr
+++ b/src/test/ui/self/elision/ref-self-async.nll.stderr
@@ -1,5 +1,5 @@
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-self-async.rs:24:42
+  --> $DIR/ref-self-async.rs:22:42
    |
 LL |     async fn ref_self(&self, f: &u32) -> &u32 {
    |                                          ^^^^
@@ -7,7 +7,7 @@ LL |     async fn ref_self(&self, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-self-async.rs:24:47
+  --> $DIR/ref-self-async.rs:22:47
    |
 LL |       async fn ref_self(&self, f: &u32) -> &u32 {
    |  _______________________-_______________________^
@@ -19,7 +19,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-self-async.rs:30:48
+  --> $DIR/ref-self-async.rs:28:48
    |
 LL |     async fn ref_Self(self: &Self, f: &u32) -> &u32 {
    |                                                ^^^^
@@ -27,7 +27,7 @@ LL |     async fn ref_Self(self: &Self, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-self-async.rs:30:53
+  --> $DIR/ref-self-async.rs:28:53
    |
 LL |       async fn ref_Self(self: &Self, f: &u32) -> &u32 {
    |  _____________________________-_______________________^
@@ -39,7 +39,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-self-async.rs:34:57
+  --> $DIR/ref-self-async.rs:32:57
    |
 LL |     async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
    |                                                         ^^^^
@@ -47,7 +47,7 @@ LL |     async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-self-async.rs:34:62
+  --> $DIR/ref-self-async.rs:32:62
    |
 LL |       async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
    |  _____________________________________-________________________^
@@ -59,7 +59,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-self-async.rs:38:57
+  --> $DIR/ref-self-async.rs:36:57
    |
 LL |     async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
    |                                                         ^^^^
@@ -67,7 +67,7 @@ LL |     async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-self-async.rs:38:62
+  --> $DIR/ref-self-async.rs:36:62
    |
 LL |       async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
    |  _____________________________________-________________________^
@@ -79,7 +79,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-self-async.rs:42:66
+  --> $DIR/ref-self-async.rs:40:66
    |
 LL |     async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
    |                                                                  ^^^^
@@ -87,7 +87,7 @@ LL |     async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-self-async.rs:42:71
+  --> $DIR/ref-self-async.rs:40:71
    |
 LL |       async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
    |  _____________________________________________-_________________________^
@@ -99,7 +99,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-self-async.rs:46:66
+  --> $DIR/ref-self-async.rs:44:66
    |
 LL |     async fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
    |                                                                  ^^^^
@@ -107,7 +107,7 @@ LL |     async fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-self-async.rs:46:71
+  --> $DIR/ref-self-async.rs:44:71
    |
 LL |       async fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
    |  _____________________________________________-_________________________^
@@ -119,7 +119,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-self-async.rs:50:69
+  --> $DIR/ref-self-async.rs:48:69
    |
 LL |     async fn wrap_ref_Self_Self(self: Wrap<&Self, Self>, f: &u8) -> &u8 {
    |                                                                     ^^^
@@ -127,7 +127,7 @@ LL |     async fn wrap_ref_Self_Self(self: Wrap<&Self, Self>, f: &u8) -> &u8 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-self-async.rs:50:73
+  --> $DIR/ref-self-async.rs:48:73
    |
 LL |       async fn wrap_ref_Self_Self(self: Wrap<&Self, Self>, f: &u8) -> &u8 {
    |  ____________________________________________-____________________________^
diff --git a/src/test/ui/self/elision/ref-self-async.rs b/src/test/ui/self/elision/ref-self-async.rs
index 5a5705d7e09..06f3b127b21 100644
--- a/src/test/ui/self/elision/ref-self-async.rs
+++ b/src/test/ui/self/elision/ref-self-async.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/ref-self-async.stderr b/src/test/ui/self/elision/ref-self-async.stderr
index eb796a07a86..2f9e2a01e34 100644
--- a/src/test/ui/self/elision/ref-self-async.stderr
+++ b/src/test/ui/self/elision/ref-self-async.stderr
@@ -1,5 +1,5 @@
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-self-async.rs:24:42
+  --> $DIR/ref-self-async.rs:22:42
    |
 LL |     async fn ref_self(&self, f: &u32) -> &u32 {
    |                       -----              ^^^^
@@ -8,7 +8,7 @@ LL |     async fn ref_self(&self, f: &u32) -> &u32 {
    |                       this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-self-async.rs:30:48
+  --> $DIR/ref-self-async.rs:28:48
    |
 LL |     async fn ref_Self(self: &Self, f: &u32) -> &u32 {
    |                             -----              ^^^^
@@ -17,7 +17,7 @@ LL |     async fn ref_Self(self: &Self, f: &u32) -> &u32 {
    |                             this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-self-async.rs:34:57
+  --> $DIR/ref-self-async.rs:32:57
    |
 LL |     async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
    |                                     -----               ^^^^
@@ -26,7 +26,7 @@ LL |     async fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
    |                                     this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-self-async.rs:38:57
+  --> $DIR/ref-self-async.rs:36:57
    |
 LL |     async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
    |                                     -----               ^^^^
@@ -35,7 +35,7 @@ LL |     async fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
    |                                     this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-self-async.rs:42:66
+  --> $DIR/ref-self-async.rs:40:66
    |
 LL |     async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
    |                                             -----                ^^^^
@@ -44,7 +44,7 @@ LL |     async fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
    |                                             this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-self-async.rs:46:66
+  --> $DIR/ref-self-async.rs:44:66
    |
 LL |     async fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
    |                                             -----                ^^^^
@@ -53,7 +53,7 @@ LL |     async fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
    |                                             this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-self-async.rs:50:69
+  --> $DIR/ref-self-async.rs:48:69
    |
 LL |     async fn wrap_ref_Self_Self(self: Wrap<&Self, Self>, f: &u8) -> &u8 {
    |                                            -----                    ^^^
diff --git a/src/test/ui/self/elision/ref-struct-async.nll.stderr b/src/test/ui/self/elision/ref-struct-async.nll.stderr
index ff50f6825bc..8508e42264b 100644
--- a/src/test/ui/self/elision/ref-struct-async.nll.stderr
+++ b/src/test/ui/self/elision/ref-struct-async.nll.stderr
@@ -1,5 +1,5 @@
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-struct-async.rs:15:52
+  --> $DIR/ref-struct-async.rs:13:52
    |
 LL |     async fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
    |                                                    ^^^^
@@ -7,7 +7,7 @@ LL |     async fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-struct-async.rs:15:57
+  --> $DIR/ref-struct-async.rs:13:57
    |
 LL |       async fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
    |  _______________________________-_________________________^
@@ -19,7 +19,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-struct-async.rs:19:61
+  --> $DIR/ref-struct-async.rs:17:61
    |
 LL |     async fn box_ref_Struct(self: Box<&Struct>, f: &u32) -> &u32 {
    |                                                             ^^^^
@@ -27,7 +27,7 @@ LL |     async fn box_ref_Struct(self: Box<&Struct>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-struct-async.rs:19:66
+  --> $DIR/ref-struct-async.rs:17:66
    |
 LL |       async fn box_ref_Struct(self: Box<&Struct>, f: &u32) -> &u32 {
    |  _______________________________________-__________________________^
@@ -39,7 +39,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-struct-async.rs:23:61
+  --> $DIR/ref-struct-async.rs:21:61
    |
 LL |     async fn pin_ref_Struct(self: Pin<&Struct>, f: &u32) -> &u32 {
    |                                                             ^^^^
@@ -47,7 +47,7 @@ LL |     async fn pin_ref_Struct(self: Pin<&Struct>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-struct-async.rs:23:66
+  --> $DIR/ref-struct-async.rs:21:66
    |
 LL |       async fn pin_ref_Struct(self: Pin<&Struct>, f: &u32) -> &u32 {
    |  _______________________________________-__________________________^
@@ -59,7 +59,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-struct-async.rs:27:70
+  --> $DIR/ref-struct-async.rs:25:70
    |
 LL |     async fn box_box_ref_Struct(self: Box<Box<&Struct>>, f: &u32) -> &u32 {
    |                                                                      ^^^^
@@ -67,7 +67,7 @@ LL |     async fn box_box_ref_Struct(self: Box<Box<&Struct>>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-struct-async.rs:27:75
+  --> $DIR/ref-struct-async.rs:25:75
    |
 LL |       async fn box_box_ref_Struct(self: Box<Box<&Struct>>, f: &u32) -> &u32 {
    |  _______________________________________________-___________________________^
@@ -79,7 +79,7 @@ LL | |     }
    | |_____^ function was supposed to return data with lifetime `'_` but it is returning data with lifetime `'_`
 
 error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
-  --> $DIR/ref-struct-async.rs:31:66
+  --> $DIR/ref-struct-async.rs:29:66
    |
 LL |     async fn box_pin_Struct(self: Box<Pin<&Struct>>, f: &u32) -> &u32 {
    |                                                                  ^^^^
@@ -87,7 +87,7 @@ LL |     async fn box_pin_Struct(self: Box<Pin<&Struct>>, f: &u32) -> &u32 {
    = note: hidden type `impl std::future::Future` captures lifetime '_#15r
 
 error: lifetime may not live long enough
-  --> $DIR/ref-struct-async.rs:31:71
+  --> $DIR/ref-struct-async.rs:29:71
    |
 LL |       async fn box_pin_Struct(self: Box<Pin<&Struct>>, f: &u32) -> &u32 {
    |  ___________________________________________-___________________________^
diff --git a/src/test/ui/self/elision/ref-struct-async.rs b/src/test/ui/self/elision/ref-struct-async.rs
index f0410bbee90..94eaeedc734 100644
--- a/src/test/ui/self/elision/ref-struct-async.rs
+++ b/src/test/ui/self/elision/ref-struct-async.rs
@@ -1,7 +1,5 @@
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/ref-struct-async.stderr b/src/test/ui/self/elision/ref-struct-async.stderr
index 574b0fddc1e..222e27ebf0d 100644
--- a/src/test/ui/self/elision/ref-struct-async.stderr
+++ b/src/test/ui/self/elision/ref-struct-async.stderr
@@ -1,5 +1,5 @@
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-struct-async.rs:15:52
+  --> $DIR/ref-struct-async.rs:13:52
    |
 LL |     async fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
    |                               -------              ^^^^
@@ -8,7 +8,7 @@ LL |     async fn ref_Struct(self: &Struct, f: &u32) -> &u32 {
    |                               this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-struct-async.rs:19:61
+  --> $DIR/ref-struct-async.rs:17:61
    |
 LL |     async fn box_ref_Struct(self: Box<&Struct>, f: &u32) -> &u32 {
    |                                       -------               ^^^^
@@ -17,7 +17,7 @@ LL |     async fn box_ref_Struct(self: Box<&Struct>, f: &u32) -> &u32 {
    |                                       this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-struct-async.rs:23:61
+  --> $DIR/ref-struct-async.rs:21:61
    |
 LL |     async fn pin_ref_Struct(self: Pin<&Struct>, f: &u32) -> &u32 {
    |                                       -------               ^^^^
@@ -26,7 +26,7 @@ LL |     async fn pin_ref_Struct(self: Pin<&Struct>, f: &u32) -> &u32 {
    |                                       this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-struct-async.rs:27:70
+  --> $DIR/ref-struct-async.rs:25:70
    |
 LL |     async fn box_box_ref_Struct(self: Box<Box<&Struct>>, f: &u32) -> &u32 {
    |                                               -------                ^^^^
@@ -35,7 +35,7 @@ LL |     async fn box_box_ref_Struct(self: Box<Box<&Struct>>, f: &u32) -> &u32 {
    |                                               this parameter and the return type are declared with different lifetimes...
 
 error[E0623]: lifetime mismatch
-  --> $DIR/ref-struct-async.rs:31:66
+  --> $DIR/ref-struct-async.rs:29:66
    |
 LL |     async fn box_pin_Struct(self: Box<Pin<&Struct>>, f: &u32) -> &u32 {
    |                                           -------                ^^^^
diff --git a/src/test/ui/self/elision/self-async.rs b/src/test/ui/self/elision/self-async.rs
index d1dc050be0d..e1379bfaf2e 100644
--- a/src/test/ui/self/elision/self-async.rs
+++ b/src/test/ui/self/elision/self-async.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/elision/struct-async.rs b/src/test/ui/self/elision/struct-async.rs
index f7c8591ebd3..4a38a2164c8 100644
--- a/src/test/ui/self/elision/struct-async.rs
+++ b/src/test/ui/self/elision/struct-async.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 #![feature(arbitrary_self_types)]
 #![allow(non_snake_case)]
 
diff --git a/src/test/ui/self/self_lifetime-async.rs b/src/test/ui/self/self_lifetime-async.rs
index ec4c3d15224..c3c6e56582d 100644
--- a/src/test/ui/self/self_lifetime-async.rs
+++ b/src/test/ui/self/self_lifetime-async.rs
@@ -1,8 +1,6 @@
 // check-pass
 // edition:2018
 
-#![feature(async_await)]
-
 struct Foo<'a>(&'a ());
 impl<'a> Foo<'a> {
     async fn foo<'b>(self: &'b Foo<'a>) -> &() { self.0 }
diff --git a/src/test/ui/suggestions/dont-suggest-ref/duplicate-suggestions.rs b/src/test/ui/suggestions/dont-suggest-ref/duplicate-suggestions.rs
index 1c1230346a5..bf0c1dc27ce 100644
--- a/src/test/ui/suggestions/dont-suggest-ref/duplicate-suggestions.rs
+++ b/src/test/ui/suggestions/dont-suggest-ref/duplicate-suggestions.rs
@@ -34,7 +34,7 @@ pub fn main() {
     let vs = &vx;
     let vsm = &mut vec![X(Y)];
 
-    // -------- test for duplicate suggestions --------
+    // test for duplicate suggestions
 
     let &(X(_t), X(_u)) = &(x.clone(), x.clone());
     //~^ ERROR cannot move
diff --git a/src/test/ui/suggestions/dont-suggest-ref/move-into-closure.rs b/src/test/ui/suggestions/dont-suggest-ref/move-into-closure.rs
index 6e3879a4155..f1e043c30f2 100644
--- a/src/test/ui/suggestions/dont-suggest-ref/move-into-closure.rs
+++ b/src/test/ui/suggestions/dont-suggest-ref/move-into-closure.rs
@@ -22,7 +22,7 @@ fn move_into_fn() {
 
     let x = X(Y);
 
-    // -------- move into Fn --------
+    // move into Fn
 
     consume_fn(|| {
         let X(_t) = x;
@@ -89,7 +89,7 @@ fn move_into_fnmut() {
 
     let x = X(Y);
 
-    // -------- move into FnMut --------
+    // move into FnMut
 
     consume_fnmut(|| {
         let X(_t) = x;
diff --git a/src/test/ui/suggestions/dont-suggest-ref/simple.rs b/src/test/ui/suggestions/dont-suggest-ref/simple.rs
index 69b303a6623..c53ac3d2cd6 100644
--- a/src/test/ui/suggestions/dont-suggest-ref/simple.rs
+++ b/src/test/ui/suggestions/dont-suggest-ref/simple.rs
@@ -33,7 +33,7 @@ pub fn main() {
     let vs = &vx;
     let vsm = &mut vec![X(Y)];
 
-    // -------- move from Either/X place --------
+    // move from Either/X place
 
     let X(_t) = *s;
     //~^ ERROR cannot move
@@ -163,7 +163,7 @@ pub fn main() {
         // FIXME: should suggest removing `ref` too
     }
 
-    // -------- move from &Either/&X place --------
+    // move from &Either/&X place
 
     let &X(_t) = s;
     //~^ ERROR cannot move
@@ -251,7 +251,7 @@ pub fn main() {
     //~| HELP consider removing the `&mut`
     //~| SUGGESTION X(_t)
 
-    // -------- move from tuple of &Either/&X --------
+    // move from tuple of &Either/&X
 
     // FIXME: These should have suggestions.
 
@@ -283,7 +283,7 @@ pub fn main() {
     fn f4((&mut X(_t),): (&mut X,)) { }
     //~^ ERROR cannot move
 
-    // -------- move from &Either/&X value --------
+    // move from &Either/&X value
 
     let &X(_t) = &x;
     //~^ ERROR cannot move
diff --git a/src/test/ui/traits/traits-conditional-model-fn.rs b/src/test/ui/traits/traits-conditional-model-fn.rs
index afdfb96394b..ba88670032c 100644
--- a/src/test/ui/traits/traits-conditional-model-fn.rs
+++ b/src/test/ui/traits/traits-conditional-model-fn.rs
@@ -6,7 +6,6 @@
 
 // aux-build:go_trait.rs
 
-
 extern crate go_trait;
 
 use go_trait::{Go, GoMut, GoOnce, go, go_mut, go_once};