[libcxx-commits] [libcxx] [libcxx] Remove atomic workaround (PR #208049)

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Wed Aug 5 19:46:10 PDT 2026


https://github.com/ldionne updated https://github.com/llvm/llvm-project/pull/208049

>From 903e443bdf9cb972fb9ee55cb2a18ef1746c3a4f Mon Sep 17 00:00:00 2001
From: Michael Jones <michaelrj at google.com>
Date: Tue, 7 Jul 2026 17:18:17 +0000
Subject: [PATCH 1/6] [libcxx] Remove atomic workaround

This PR is intended to test what breaks when removing the
"add-latomic-workaround" feature test.
---
 libcxx/utils/libcxx/test/features/misc.py | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/libcxx/utils/libcxx/test/features/misc.py b/libcxx/utils/libcxx/test/features/misc.py
index 3701498f595dc..0987daee210b9 100644
--- a/libcxx/utils/libcxx/test/features/misc.py
+++ b/libcxx/utils/libcxx/test/features/misc.py
@@ -84,13 +84,13 @@ def _mingwSupportsModules(cfg):
         name="verify-support",
         when=lambda cfg: hasCompileFlag(cfg, "-Xclang -verify-ignore-unexpected"),
     ),
-    Feature(
-        name="add-latomic-workaround",  # https://llvm.org/PR73361
-        when=lambda cfg: sourceBuilds(
-            cfg, "int main(int, char**) { return 0; }", ["-latomic"]
-        ),
-        actions=[AddLinkFlag("-latomic")],
-    ),
+    # Feature(
+    #     name="add-latomic-workaround",  # https://llvm.org/PR73361
+    #     when=lambda cfg: sourceBuilds(
+    #         cfg, "int main(int, char**) { return 0; }", ["-latomic"]
+    #     ),
+    #     actions=[AddLinkFlag("-latomic")],
+    # ),
     *(
         Feature(
             name=f"has-{n}-bit-atomics",

>From 32eb74e0d4a5f83cb333011d6a8c6d3c9f97b555 Mon Sep 17 00:00:00 2001
From: Michael Jones <michaelrj at google.com>
Date: Wed, 15 Jul 2026 20:32:51 +0000
Subject: [PATCH 2/6] XFAIL test that breaks on gcc

---
 .../atomics/atomics.types.generic/cas_non_power_of_2.pass.cpp  | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/libcxx/test/std/atomics/atomics.types.generic/cas_non_power_of_2.pass.cpp b/libcxx/test/std/atomics/atomics.types.generic/cas_non_power_of_2.pass.cpp
index 254899d8f9633..b5b68dee1e8d6 100644
--- a/libcxx/test/std/atomics/atomics.types.generic/cas_non_power_of_2.pass.cpp
+++ b/libcxx/test/std/atomics/atomics.types.generic/cas_non_power_of_2.pass.cpp
@@ -20,6 +20,9 @@
 // __atomic_compare_exchange: https://github.com/llvm/llvm-project/issues/191388
 // UNSUPPORTED: LIBCXX-PICOLIBC-FIXME
 
+// GCC fails to link without explicit -latomic
+// XFAIL: gcc
+
 #include <atomic>
 #include <cstring>
 #include <cassert>

>From 17e406ffa0832c4b46932cf812504d1779e01ebf Mon Sep 17 00:00:00 2001
From: Michael Jones <michaelrj at google.com>
Date: Thu, 16 Jul 2026 21:21:30 +0000
Subject: [PATCH 3/6] xfail hardened atomic tests.

---
 .../atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp  | 1 +
 .../atomics/atomics.ref/assert.compare_exchange_weak.pass.cpp    | 1 +
 libcxx/test/libcxx/atomics/atomics.ref/assert.load.pass.cpp      | 1 +
 libcxx/test/libcxx/atomics/atomics.ref/assert.store.pass.cpp     | 1 +
 libcxx/test/libcxx/atomics/atomics.ref/assert.wait.pass.cpp      | 1 +
 5 files changed, 5 insertions(+)

diff --git a/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp b/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp
index 92f6a622c329c..a933885797a94 100644
--- a/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp
+++ b/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp
@@ -10,6 +10,7 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17
 // UNSUPPORTED: libcpp-hardening-mode=none || libcpp-hardening-mode=fast
 // XFAIL: libcpp-hardening-mode=debug && availability-verbose_abort-missing
+// XFAIL: libcpp-hardening-mode={{extensive|debug}}
 // ADDITIONAL_COMPILE_FLAGS: -Wno-user-defined-warnings
 
 // <atomic>
diff --git a/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_weak.pass.cpp b/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_weak.pass.cpp
index 3bee003b2143f..ed52c6ce2d73c 100644
--- a/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_weak.pass.cpp
+++ b/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_weak.pass.cpp
@@ -10,6 +10,7 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17
 // UNSUPPORTED: libcpp-hardening-mode=none || libcpp-hardening-mode=fast
 // XFAIL: libcpp-hardening-mode=debug && availability-verbose_abort-missing
+// XFAIL: libcpp-hardening-mode={{extensive|debug}}
 // ADDITIONAL_COMPILE_FLAGS: -Wno-user-defined-warnings
 
 // <atomic>
diff --git a/libcxx/test/libcxx/atomics/atomics.ref/assert.load.pass.cpp b/libcxx/test/libcxx/atomics/atomics.ref/assert.load.pass.cpp
index 504d135c4f3d7..c089158481395 100644
--- a/libcxx/test/libcxx/atomics/atomics.ref/assert.load.pass.cpp
+++ b/libcxx/test/libcxx/atomics/atomics.ref/assert.load.pass.cpp
@@ -10,6 +10,7 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17
 // UNSUPPORTED: libcpp-hardening-mode=none || libcpp-hardening-mode=fast
 // XFAIL: libcpp-hardening-mode=debug && availability-verbose_abort-missing
+// XFAIL: libcpp-hardening-mode={{extensive|debug}}
 // ADDITIONAL_COMPILE_FLAGS: -Wno-user-defined-warnings
 
 // <atomic>
diff --git a/libcxx/test/libcxx/atomics/atomics.ref/assert.store.pass.cpp b/libcxx/test/libcxx/atomics/atomics.ref/assert.store.pass.cpp
index 1afa42528e14f..6101896ec4803 100644
--- a/libcxx/test/libcxx/atomics/atomics.ref/assert.store.pass.cpp
+++ b/libcxx/test/libcxx/atomics/atomics.ref/assert.store.pass.cpp
@@ -10,6 +10,7 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17
 // UNSUPPORTED: libcpp-hardening-mode=none || libcpp-hardening-mode=fast
 // XFAIL: libcpp-hardening-mode=debug && availability-verbose_abort-missing
+// XFAIL: libcpp-hardening-mode={{extensive|debug}}
 // ADDITIONAL_COMPILE_FLAGS: -Wno-user-defined-warnings
 
 // <atomic>
diff --git a/libcxx/test/libcxx/atomics/atomics.ref/assert.wait.pass.cpp b/libcxx/test/libcxx/atomics/atomics.ref/assert.wait.pass.cpp
index 39178d2393be2..a014a85c80284 100644
--- a/libcxx/test/libcxx/atomics/atomics.ref/assert.wait.pass.cpp
+++ b/libcxx/test/libcxx/atomics/atomics.ref/assert.wait.pass.cpp
@@ -10,6 +10,7 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17
 // UNSUPPORTED: libcpp-hardening-mode=none || libcpp-hardening-mode=fast
 // XFAIL: libcpp-hardening-mode=debug && availability-verbose_abort-missing
+// XFAIL: libcpp-hardening-mode={{extensive|debug}}
 // ADDITIONAL_COMPILE_FLAGS: -Wno-user-defined-warnings
 
 // <atomic>

>From 73418cce7badb6fcc050ef98164a077d94d736d2 Mon Sep 17 00:00:00 2001
From: Michael Jones <michaelrj at google.com>
Date: Fri, 31 Jul 2026 22:34:20 +0000
Subject: [PATCH 4/6] delete check instead of commenting

---
 libcxx/utils/libcxx/test/features/misc.py | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/libcxx/utils/libcxx/test/features/misc.py b/libcxx/utils/libcxx/test/features/misc.py
index 0987daee210b9..ada72bc0da3a8 100644
--- a/libcxx/utils/libcxx/test/features/misc.py
+++ b/libcxx/utils/libcxx/test/features/misc.py
@@ -84,13 +84,6 @@ def _mingwSupportsModules(cfg):
         name="verify-support",
         when=lambda cfg: hasCompileFlag(cfg, "-Xclang -verify-ignore-unexpected"),
     ),
-    # Feature(
-    #     name="add-latomic-workaround",  # https://llvm.org/PR73361
-    #     when=lambda cfg: sourceBuilds(
-    #         cfg, "int main(int, char**) { return 0; }", ["-latomic"]
-    #     ),
-    #     actions=[AddLinkFlag("-latomic")],
-    # ),
     *(
         Feature(
             name=f"has-{n}-bit-atomics",

>From 77201c5f640976d6d87ddd78eb8692b767f727ba Mon Sep 17 00:00:00 2001
From: Michael Jones <michaelrj at google.com>
Date: Fri, 31 Jul 2026 22:34:41 +0000
Subject: [PATCH 5/6] adjust test configuration

---
 .../atomics.ref/assert.compare_exchange_strong.pass.cpp        | 1 -
 .../atomics/atomics.types.generic/cas_non_power_of_2.pass.cpp  | 3 +--
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp b/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp
index a933885797a94..92f6a622c329c 100644
--- a/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp
+++ b/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp
@@ -10,7 +10,6 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17
 // UNSUPPORTED: libcpp-hardening-mode=none || libcpp-hardening-mode=fast
 // XFAIL: libcpp-hardening-mode=debug && availability-verbose_abort-missing
-// XFAIL: libcpp-hardening-mode={{extensive|debug}}
 // ADDITIONAL_COMPILE_FLAGS: -Wno-user-defined-warnings
 
 // <atomic>
diff --git a/libcxx/test/std/atomics/atomics.types.generic/cas_non_power_of_2.pass.cpp b/libcxx/test/std/atomics/atomics.types.generic/cas_non_power_of_2.pass.cpp
index b5b68dee1e8d6..dec50b206ef64 100644
--- a/libcxx/test/std/atomics/atomics.types.generic/cas_non_power_of_2.pass.cpp
+++ b/libcxx/test/std/atomics/atomics.types.generic/cas_non_power_of_2.pass.cpp
@@ -20,8 +20,7 @@
 // __atomic_compare_exchange: https://github.com/llvm/llvm-project/issues/191388
 // UNSUPPORTED: LIBCXX-PICOLIBC-FIXME
 
-// GCC fails to link without explicit -latomic
-// XFAIL: gcc
+// ADDITIONAL_COMPILE_FLAGS(gcc): -latomic
 
 #include <atomic>
 #include <cstring>

>From e88ddb8a9a65e4aa7cd5bc244b2616d267d7578b Mon Sep 17 00:00:00 2001
From: Michael Jones <michaelrj at google.com>
Date: Tue, 4 Aug 2026 18:00:20 +0000
Subject: [PATCH 6/6] add description for test failures

---
 .../atomics.ref/assert.compare_exchange_strong.pass.cpp       | 4 ++++
 .../atomics/atomics.ref/assert.compare_exchange_weak.pass.cpp | 3 +++
 libcxx/test/libcxx/atomics/atomics.ref/assert.load.pass.cpp   | 3 +++
 libcxx/test/libcxx/atomics/atomics.ref/assert.store.pass.cpp  | 3 +++
 libcxx/test/libcxx/atomics/atomics.ref/assert.wait.pass.cpp   | 3 +++
 5 files changed, 16 insertions(+)

diff --git a/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp b/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp
index 92f6a622c329c..bb974de4a7d5d 100644
--- a/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp
+++ b/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_strong.pass.cpp
@@ -10,6 +10,10 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17
 // UNSUPPORTED: libcpp-hardening-mode=none || libcpp-hardening-mode=fast
 // XFAIL: libcpp-hardening-mode=debug && availability-verbose_abort-missing
+
+// undefined reference to symbol '__atomic_compare_exchange@@LIBATOMIC_1.0'
+// XFAIL: libcpp-hardening-mode={{extensive|debug}}
+
 // ADDITIONAL_COMPILE_FLAGS: -Wno-user-defined-warnings
 
 // <atomic>
diff --git a/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_weak.pass.cpp b/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_weak.pass.cpp
index ed52c6ce2d73c..944e944ccb232 100644
--- a/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_weak.pass.cpp
+++ b/libcxx/test/libcxx/atomics/atomics.ref/assert.compare_exchange_weak.pass.cpp
@@ -10,7 +10,10 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17
 // UNSUPPORTED: libcpp-hardening-mode=none || libcpp-hardening-mode=fast
 // XFAIL: libcpp-hardening-mode=debug && availability-verbose_abort-missing
+
+// undefined reference to symbol '__atomic_compare_exchange@@LIBATOMIC_1.0'
 // XFAIL: libcpp-hardening-mode={{extensive|debug}}
+
 // ADDITIONAL_COMPILE_FLAGS: -Wno-user-defined-warnings
 
 // <atomic>
diff --git a/libcxx/test/libcxx/atomics/atomics.ref/assert.load.pass.cpp b/libcxx/test/libcxx/atomics/atomics.ref/assert.load.pass.cpp
index c089158481395..d623b6d2c7717 100644
--- a/libcxx/test/libcxx/atomics/atomics.ref/assert.load.pass.cpp
+++ b/libcxx/test/libcxx/atomics/atomics.ref/assert.load.pass.cpp
@@ -10,7 +10,10 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17
 // UNSUPPORTED: libcpp-hardening-mode=none || libcpp-hardening-mode=fast
 // XFAIL: libcpp-hardening-mode=debug && availability-verbose_abort-missing
+
+// undefined reference to symbol '__atomic_compare_exchange@@LIBATOMIC_1.0'
 // XFAIL: libcpp-hardening-mode={{extensive|debug}}
+
 // ADDITIONAL_COMPILE_FLAGS: -Wno-user-defined-warnings
 
 // <atomic>
diff --git a/libcxx/test/libcxx/atomics/atomics.ref/assert.store.pass.cpp b/libcxx/test/libcxx/atomics/atomics.ref/assert.store.pass.cpp
index 6101896ec4803..208701ef35fcd 100644
--- a/libcxx/test/libcxx/atomics/atomics.ref/assert.store.pass.cpp
+++ b/libcxx/test/libcxx/atomics/atomics.ref/assert.store.pass.cpp
@@ -10,7 +10,10 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17
 // UNSUPPORTED: libcpp-hardening-mode=none || libcpp-hardening-mode=fast
 // XFAIL: libcpp-hardening-mode=debug && availability-verbose_abort-missing
+
+// undefined reference to symbol '__atomic_compare_exchange@@LIBATOMIC_1.0'
 // XFAIL: libcpp-hardening-mode={{extensive|debug}}
+
 // ADDITIONAL_COMPILE_FLAGS: -Wno-user-defined-warnings
 
 // <atomic>
diff --git a/libcxx/test/libcxx/atomics/atomics.ref/assert.wait.pass.cpp b/libcxx/test/libcxx/atomics/atomics.ref/assert.wait.pass.cpp
index a014a85c80284..4ff31beae15c4 100644
--- a/libcxx/test/libcxx/atomics/atomics.ref/assert.wait.pass.cpp
+++ b/libcxx/test/libcxx/atomics/atomics.ref/assert.wait.pass.cpp
@@ -10,7 +10,10 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17
 // UNSUPPORTED: libcpp-hardening-mode=none || libcpp-hardening-mode=fast
 // XFAIL: libcpp-hardening-mode=debug && availability-verbose_abort-missing
+
+// undefined reference to symbol '__atomic_compare_exchange@@LIBATOMIC_1.0'
 // XFAIL: libcpp-hardening-mode={{extensive|debug}}
+
 // ADDITIONAL_COMPILE_FLAGS: -Wno-user-defined-warnings
 
 // <atomic>



More information about the libcxx-commits mailing list