[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