From 49d48231126c3e83614f399bea653f45c2d8daf9 Mon Sep 17 00:00:00 2001
From: Amanieu d'Antras <amanieu@gmail.com>
Date: Wed, 9 Feb 2022 18:14:35 +0000
Subject: [PATCH] Stabilize cfg_target_has_atomic

Closes #32976
---
 compiler/rustc_feature/src/accepted.rs        |   2 +
 compiler/rustc_feature/src/active.rs          |   4 +-
 compiler/rustc_feature/src/builtin_attrs.rs   |   6 +-
 compiler/rustc_span/src/symbol.rs             |   1 +
 library/alloc/src/lib.rs                      |   2 +-
 library/core/src/lib.rs                       |   3 +-
 library/core/tests/lib.rs                     |   2 +-
 library/std/src/lib.rs                        |   2 +-
 .../atomic-lock-free/atomic_lock_free.rs      |   2 +-
 ...e-cfg-target-has-atomic-equal-alignment.rs |  14 +
 ...g-target-has-atomic-equal-alignment.stderr |  57 ++++
 .../feature-gate-cfg-target-has-atomic.rs     | 118 --------
 .../feature-gate-cfg-target-has-atomic.stderr | 273 ------------------
 13 files changed, 84 insertions(+), 402 deletions(-)
 create mode 100644 src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic-equal-alignment.rs
 create mode 100644 src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic-equal-alignment.stderr
 delete mode 100644 src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic.rs
 delete mode 100644 src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic.stderr

diff --git a/compiler/rustc_feature/src/accepted.rs b/compiler/rustc_feature/src/accepted.rs
index 32a9d081ed8..88edaec9169 100644
--- a/compiler/rustc_feature/src/accepted.rs
+++ b/compiler/rustc_feature/src/accepted.rs
@@ -72,6 +72,8 @@ declare_features! (
     (accepted, cfg_doctest, "1.40.0", Some(62210), None),
     /// Allows `cfg(target_feature = "...")`.
     (accepted, cfg_target_feature, "1.27.0", Some(29717), None),
+    /// Allows `cfg(target_has_atomic = "...")`.
+    (accepted, cfg_target_has_atomic, "1.60.0", Some(32976), None),
     /// Allows `cfg(target_vendor = "...")`.
     (accepted, cfg_target_vendor, "1.33.0", Some(29718), None),
     /// Allows implementing `Clone` for closures where possible (RFC 2132).
diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs
index e5232bf3dd0..71b9419bab5 100644
--- a/compiler/rustc_feature/src/active.rs
+++ b/compiler/rustc_feature/src/active.rs
@@ -309,8 +309,8 @@ declare_features! (
     (active, cfg_sanitize, "1.41.0", Some(39699), None),
     /// Allows `cfg(target_abi = "...")`.
     (active, cfg_target_abi, "1.55.0", Some(80970), None),
-    /// Allows `cfg(target_has_atomic = "...")`.
-    (active, cfg_target_has_atomic, "1.9.0", Some(32976), None),
+    /// Allows `cfg(target_has_atomic_equal_alignment = "...")`.
+    (active, cfg_target_has_atomic_equal_alignment, "1.60.0", Some(93822), None),
     /// Allows `cfg(target_thread_local)`.
     (active, cfg_target_thread_local, "1.7.0", Some(29594), None),
     /// Allow conditional compilation depending on rust version
diff --git a/compiler/rustc_feature/src/builtin_attrs.rs b/compiler/rustc_feature/src/builtin_attrs.rs
index cb2562d09a5..7ebef8e19ad 100644
--- a/compiler/rustc_feature/src/builtin_attrs.rs
+++ b/compiler/rustc_feature/src/builtin_attrs.rs
@@ -26,12 +26,10 @@ const GATED_CFGS: &[GatedCfg] = &[
     // (name in cfg, feature, function to check if the feature is enabled)
     (sym::target_abi, sym::cfg_target_abi, cfg_fn!(cfg_target_abi)),
     (sym::target_thread_local, sym::cfg_target_thread_local, cfg_fn!(cfg_target_thread_local)),
-    (sym::target_has_atomic, sym::cfg_target_has_atomic, cfg_fn!(cfg_target_has_atomic)),
-    (sym::target_has_atomic_load_store, sym::cfg_target_has_atomic, cfg_fn!(cfg_target_has_atomic)),
     (
         sym::target_has_atomic_equal_alignment,
-        sym::cfg_target_has_atomic,
-        cfg_fn!(cfg_target_has_atomic),
+        sym::cfg_target_has_atomic_equal_alignment,
+        cfg_fn!(cfg_target_has_atomic_equal_alignment),
     ),
     (sym::sanitize, sym::cfg_sanitize, cfg_fn!(cfg_sanitize)),
     (sym::version, sym::cfg_version, cfg_fn!(cfg_version)),
diff --git a/compiler/rustc_span/src/symbol.rs b/compiler/rustc_span/src/symbol.rs
index 70fad4911f9..95f6e19e591 100644
--- a/compiler/rustc_span/src/symbol.rs
+++ b/compiler/rustc_span/src/symbol.rs
@@ -421,6 +421,7 @@ symbols! {
         cfg_target_abi,
         cfg_target_feature,
         cfg_target_has_atomic,
+        cfg_target_has_atomic_equal_alignment,
         cfg_target_thread_local,
         cfg_target_vendor,
         cfg_version,
diff --git a/library/alloc/src/lib.rs b/library/alloc/src/lib.rs
index a07071cb6fb..ab9f0b9d737 100644
--- a/library/alloc/src/lib.rs
+++ b/library/alloc/src/lib.rs
@@ -140,7 +140,7 @@
 #![feature(associated_type_bounds)]
 #![feature(box_syntax)]
 #![feature(cfg_sanitize)]
-#![feature(cfg_target_has_atomic)]
+#![cfg_attr(bootstrap, feature(cfg_target_has_atomic))]
 #![feature(const_deref)]
 #![feature(const_fn_trait_bound)]
 #![feature(const_mut_refs)]
diff --git a/library/core/src/lib.rs b/library/core/src/lib.rs
index e52d52e954c..72d8e1b3903 100644
--- a/library/core/src/lib.rs
+++ b/library/core/src/lib.rs
@@ -155,7 +155,8 @@
 #![feature(allow_internal_unstable)]
 #![feature(associated_type_bounds)]
 #![feature(auto_traits)]
-#![feature(cfg_target_has_atomic)]
+#![cfg_attr(bootstrap, feature(cfg_target_has_atomic))]
+#![cfg_attr(not(bootstrap), feature(cfg_target_has_atomic_equal_alignment))]
 #![feature(const_fn_floating_point_arithmetic)]
 #![feature(const_fn_fn_ptr_basics)]
 #![feature(const_fn_trait_bound)]
diff --git a/library/core/tests/lib.rs b/library/core/tests/lib.rs
index a993def0a81..1c512471c95 100644
--- a/library/core/tests/lib.rs
+++ b/library/core/tests/lib.rs
@@ -7,7 +7,7 @@
 #![feature(box_syntax)]
 #![feature(cell_update)]
 #![feature(cfg_panic)]
-#![feature(cfg_target_has_atomic)]
+#![cfg_attr(bootstrap, feature(cfg_target_has_atomic))]
 #![feature(const_assume)]
 #![feature(const_black_box)]
 #![feature(const_bool_to_option)]
diff --git a/library/std/src/lib.rs b/library/std/src/lib.rs
index 4f44a3183a6..2aae29f2154 100644
--- a/library/std/src/lib.rs
+++ b/library/std/src/lib.rs
@@ -242,7 +242,7 @@
 #![feature(c_variadic)]
 #![feature(cfg_accessible)]
 #![feature(cfg_eval)]
-#![feature(cfg_target_has_atomic)]
+#![cfg_attr(bootstrap, feature(cfg_target_has_atomic))]
 #![feature(cfg_target_thread_local)]
 #![feature(char_error_internals)]
 #![feature(char_internals)]
diff --git a/src/test/run-make-fulldeps/atomic-lock-free/atomic_lock_free.rs b/src/test/run-make-fulldeps/atomic-lock-free/atomic_lock_free.rs
index bc7951a04da..e9b28504a90 100644
--- a/src/test/run-make-fulldeps/atomic-lock-free/atomic_lock_free.rs
+++ b/src/test/run-make-fulldeps/atomic-lock-free/atomic_lock_free.rs
@@ -1,4 +1,4 @@
-#![feature(cfg_target_has_atomic, no_core, intrinsics, lang_items)]
+#![feature(no_core, intrinsics, lang_items)]
 #![crate_type="rlib"]
 #![no_core]
 
diff --git a/src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic-equal-alignment.rs b/src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic-equal-alignment.rs
new file mode 100644
index 00000000000..3d692a07001
--- /dev/null
+++ b/src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic-equal-alignment.rs
@@ -0,0 +1,14 @@
+fn main() {
+    cfg!(target_has_atomic_equal_alignment = "8");
+    //~^ ERROR `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
+    cfg!(target_has_atomic_equal_alignment = "16");
+    //~^ ERROR `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
+    cfg!(target_has_atomic_equal_alignment = "32");
+    //~^ ERROR `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
+    cfg!(target_has_atomic_equal_alignment = "64");
+    //~^ ERROR `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
+    cfg!(target_has_atomic_equal_alignment = "128");
+    //~^ ERROR `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
+    cfg!(target_has_atomic_equal_alignment = "ptr");
+    //~^ ERROR `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
+}
diff --git a/src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic-equal-alignment.stderr b/src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic-equal-alignment.stderr
new file mode 100644
index 00000000000..8ad3b034aa5
--- /dev/null
+++ b/src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic-equal-alignment.stderr
@@ -0,0 +1,57 @@
+error[E0658]: `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
+  --> $DIR/feature-gate-cfg-target-has-atomic-equal-alignment.rs:2:10
+   |
+LL |     cfg!(target_has_atomic_equal_alignment = "8");
+   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #93822 <https://github.com/rust-lang/rust/issues/93822> for more information
+   = help: add `#![feature(cfg_target_has_atomic_equal_alignment)]` to the crate attributes to enable
+
+error[E0658]: `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
+  --> $DIR/feature-gate-cfg-target-has-atomic-equal-alignment.rs:4:10
+   |
+LL |     cfg!(target_has_atomic_equal_alignment = "16");
+   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #93822 <https://github.com/rust-lang/rust/issues/93822> for more information
+   = help: add `#![feature(cfg_target_has_atomic_equal_alignment)]` to the crate attributes to enable
+
+error[E0658]: `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
+  --> $DIR/feature-gate-cfg-target-has-atomic-equal-alignment.rs:6:10
+   |
+LL |     cfg!(target_has_atomic_equal_alignment = "32");
+   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #93822 <https://github.com/rust-lang/rust/issues/93822> for more information
+   = help: add `#![feature(cfg_target_has_atomic_equal_alignment)]` to the crate attributes to enable
+
+error[E0658]: `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
+  --> $DIR/feature-gate-cfg-target-has-atomic-equal-alignment.rs:8:10
+   |
+LL |     cfg!(target_has_atomic_equal_alignment = "64");
+   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #93822 <https://github.com/rust-lang/rust/issues/93822> for more information
+   = help: add `#![feature(cfg_target_has_atomic_equal_alignment)]` to the crate attributes to enable
+
+error[E0658]: `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
+  --> $DIR/feature-gate-cfg-target-has-atomic-equal-alignment.rs:10:10
+   |
+LL |     cfg!(target_has_atomic_equal_alignment = "128");
+   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #93822 <https://github.com/rust-lang/rust/issues/93822> for more information
+   = help: add `#![feature(cfg_target_has_atomic_equal_alignment)]` to the crate attributes to enable
+
+error[E0658]: `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
+  --> $DIR/feature-gate-cfg-target-has-atomic-equal-alignment.rs:12:10
+   |
+LL |     cfg!(target_has_atomic_equal_alignment = "ptr");
+   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #93822 <https://github.com/rust-lang/rust/issues/93822> for more information
+   = help: add `#![feature(cfg_target_has_atomic_equal_alignment)]` to the crate attributes to enable
+
+error: aborting due to 6 previous errors
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic.rs b/src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic.rs
deleted file mode 100644
index 049fdd84d8c..00000000000
--- a/src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic.rs
+++ /dev/null
@@ -1,118 +0,0 @@
-#![feature(intrinsics, lang_items, no_core, rustc_attrs)]
-
-#![crate_type="rlib"]
-#![no_core]
-
-extern "rust-intrinsic" {
-    fn atomic_xadd<T>(dst: *mut T, src: T) -> T;
-}
-
-#[lang = "sized"]
-trait Sized {}
-#[lang = "copy"]
-trait Copy {}
-
-#[cfg(target_has_atomic = "8")]
-//~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-pub unsafe fn atomic_u8(x: *mut u8) {
-    atomic_xadd(x, 1);
-    atomic_xadd(x, 1);
-}
-#[cfg(target_has_atomic = "8")]
-//~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-pub unsafe fn atomic_i8(x: *mut i8) {
-    atomic_xadd(x, 1);
-}
-#[cfg(target_has_atomic = "16")]
-//~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-pub unsafe fn atomic_u16(x: *mut u16) {
-    atomic_xadd(x, 1);
-}
-#[cfg(target_has_atomic = "16")]
-//~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-pub unsafe fn atomic_i16(x: *mut i16) {
-    atomic_xadd(x, 1);
-}
-#[cfg(target_has_atomic = "32")]
-//~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-pub unsafe fn atomic_u32(x: *mut u32) {
-    atomic_xadd(x, 1);
-}
-#[cfg(target_has_atomic = "32")]
-//~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-pub unsafe fn atomic_i32(x: *mut i32) {
-    atomic_xadd(x, 1);
-}
-#[cfg(target_has_atomic = "64")]
-//~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-pub unsafe fn atomic_u64(x: *mut u64) {
-    atomic_xadd(x, 1);
-}
-#[cfg(target_has_atomic = "64")]
-//~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-pub unsafe fn atomic_i64(x: *mut i64) {
-    atomic_xadd(x, 1);
-}
-#[cfg(target_has_atomic = "128")]
-//~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-pub unsafe fn atomic_u128(x: *mut u128) {
-    atomic_xadd(x, 1);
-}
-#[cfg(target_has_atomic = "128")]
-//~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-pub unsafe fn atomic_i128(x: *mut i128) {
-    atomic_xadd(x, 1);
-}
-#[cfg(target_has_atomic = "ptr")]
-//~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-pub unsafe fn atomic_usize(x: *mut usize) {
-    atomic_xadd(x, 1);
-}
-#[cfg(target_has_atomic = "ptr")]
-//~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-pub unsafe fn atomic_isize(x: *mut isize) {
-    atomic_xadd(x, 1);
-}
-
-fn main() {
-    cfg!(target_has_atomic = "8");
-    //~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-    cfg!(target_has_atomic = "16");
-    //~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-    cfg!(target_has_atomic = "32");
-    //~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-    cfg!(target_has_atomic = "64");
-    //~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-    cfg!(target_has_atomic = "128");
-    //~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-    cfg!(target_has_atomic = "ptr");
-    //~^ ERROR `cfg(target_has_atomic)` is experimental and subject to change
-    cfg!(target_has_atomic_load_store = "8");
-    //~^ ERROR `cfg(target_has_atomic_load_store)` is experimental and subject to change
-    cfg!(target_has_atomic_load_store = "16");
-    //~^ ERROR `cfg(target_has_atomic_load_store)` is experimental and subject to change
-    cfg!(target_has_atomic_load_store = "32");
-    //~^ ERROR `cfg(target_has_atomic_load_store)` is experimental and subject to change
-    cfg!(target_has_atomic_load_store = "64");
-    //~^ ERROR `cfg(target_has_atomic_load_store)` is experimental and subject to change
-    cfg!(target_has_atomic_load_store = "128");
-    //~^ ERROR `cfg(target_has_atomic_load_store)` is experimental and subject to change
-    cfg!(target_has_atomic_load_store = "ptr");
-    //~^ ERROR `cfg(target_has_atomic_load_store)` is experimental and subject to change
-    cfg!(target_has_atomic_equal_alignment = "8");
-    //~^ ERROR `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
-    cfg!(target_has_atomic_equal_alignment = "16");
-    //~^ ERROR `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
-    cfg!(target_has_atomic_equal_alignment = "32");
-    //~^ ERROR `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
-    cfg!(target_has_atomic_equal_alignment = "64");
-    //~^ ERROR `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
-    cfg!(target_has_atomic_equal_alignment = "128");
-    //~^ ERROR `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
-    cfg!(target_has_atomic_equal_alignment = "ptr");
-    //~^ ERROR `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
-}
-
-#[macro_export]
-#[rustc_builtin_macro]
-macro_rules! cfg { () => () }
diff --git a/src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic.stderr b/src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic.stderr
deleted file mode 100644
index 16e1dc64400..00000000000
--- a/src/test/ui/feature-gates/feature-gate-cfg-target-has-atomic.stderr
+++ /dev/null
@@ -1,273 +0,0 @@
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:15:7
-   |
-LL | #[cfg(target_has_atomic = "8")]
-   |       ^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:21:7
-   |
-LL | #[cfg(target_has_atomic = "8")]
-   |       ^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:26:7
-   |
-LL | #[cfg(target_has_atomic = "16")]
-   |       ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:31:7
-   |
-LL | #[cfg(target_has_atomic = "16")]
-   |       ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:36:7
-   |
-LL | #[cfg(target_has_atomic = "32")]
-   |       ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:41:7
-   |
-LL | #[cfg(target_has_atomic = "32")]
-   |       ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:46:7
-   |
-LL | #[cfg(target_has_atomic = "64")]
-   |       ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:51:7
-   |
-LL | #[cfg(target_has_atomic = "64")]
-   |       ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:56:7
-   |
-LL | #[cfg(target_has_atomic = "128")]
-   |       ^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:61:7
-   |
-LL | #[cfg(target_has_atomic = "128")]
-   |       ^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:66:7
-   |
-LL | #[cfg(target_has_atomic = "ptr")]
-   |       ^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:71:7
-   |
-LL | #[cfg(target_has_atomic = "ptr")]
-   |       ^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:78:10
-   |
-LL |     cfg!(target_has_atomic = "8");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:80:10
-   |
-LL |     cfg!(target_has_atomic = "16");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:82:10
-   |
-LL |     cfg!(target_has_atomic = "32");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:84:10
-   |
-LL |     cfg!(target_has_atomic = "64");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:86:10
-   |
-LL |     cfg!(target_has_atomic = "128");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:88:10
-   |
-LL |     cfg!(target_has_atomic = "ptr");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic_load_store)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:90:10
-   |
-LL |     cfg!(target_has_atomic_load_store = "8");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic_load_store)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:92:10
-   |
-LL |     cfg!(target_has_atomic_load_store = "16");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic_load_store)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:94:10
-   |
-LL |     cfg!(target_has_atomic_load_store = "32");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic_load_store)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:96:10
-   |
-LL |     cfg!(target_has_atomic_load_store = "64");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic_load_store)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:98:10
-   |
-LL |     cfg!(target_has_atomic_load_store = "128");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic_load_store)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:100:10
-   |
-LL |     cfg!(target_has_atomic_load_store = "ptr");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:102:10
-   |
-LL |     cfg!(target_has_atomic_equal_alignment = "8");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:104:10
-   |
-LL |     cfg!(target_has_atomic_equal_alignment = "16");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:106:10
-   |
-LL |     cfg!(target_has_atomic_equal_alignment = "32");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:108:10
-   |
-LL |     cfg!(target_has_atomic_equal_alignment = "64");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:110:10
-   |
-LL |     cfg!(target_has_atomic_equal_alignment = "128");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error[E0658]: `cfg(target_has_atomic_equal_alignment)` is experimental and subject to change
-  --> $DIR/feature-gate-cfg-target-has-atomic.rs:112:10
-   |
-LL |     cfg!(target_has_atomic_equal_alignment = "ptr");
-   |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = note: see issue #32976 <https://github.com/rust-lang/rust/issues/32976> for more information
-   = help: add `#![feature(cfg_target_has_atomic)]` to the crate attributes to enable
-
-error: aborting due to 30 previous errors
-
-For more information about this error, try `rustc --explain E0658`.