[libcxx] [llvm] speculative attempt to fix what might be configuration race condition (PR #146157)

via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 28 12:13:02 PDT 2025


https://github.com/EricWF updated https://github.com/llvm/llvm-project/pull/146157

>From f9128a963cbadde75e0c0f7ed2c7cbdb5cad2d80 Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric at efcs.ca>
Date: Fri, 27 Jun 2025 17:12:27 -0400
Subject: [PATCH 01/12] speculative attempt to fix what might be configuration
 race condition

---
 libcxx/test/benchmarks/CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libcxx/test/benchmarks/CMakeLists.txt b/libcxx/test/benchmarks/CMakeLists.txt
index b0fe600623d96..6237572657638 100644
--- a/libcxx/test/benchmarks/CMakeLists.txt
+++ b/libcxx/test/benchmarks/CMakeLists.txt
@@ -30,7 +30,7 @@ endif()
 
 ExternalProject_Add(google-benchmark
         EXCLUDE_FROM_ALL ON
-        DEPENDS cxx cxx-headers
+        DEPENDS cxx cxx-headers install-cxx-test-suite-prefix
         PREFIX google-benchmark
         SOURCE_DIR ${LLVM_THIRD_PARTY_DIR}/benchmark
         INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/google-benchmark

>From 6664bf9e44981799601fbb25ad88f5f24648ef05 Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric at efcs.ca>
Date: Sat, 28 Jun 2025 11:50:12 -0400
Subject: [PATCH 02/12] temporarily disable benchmarks with tsan

---
 libcxx/cmake/caches/Generic-tsan.cmake | 1 +
 libcxx/test/benchmarks/CMakeLists.txt  | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/libcxx/cmake/caches/Generic-tsan.cmake b/libcxx/cmake/caches/Generic-tsan.cmake
index c42c1bb8e7222..de4a76d7842ea 100644
--- a/libcxx/cmake/caches/Generic-tsan.cmake
+++ b/libcxx/cmake/caches/Generic-tsan.cmake
@@ -1,2 +1,3 @@
 set(LLVM_USE_SANITIZER "Thread" CACHE STRING "")
 set(LIBCXXABI_USE_LLVM_UNWINDER OFF CACHE BOOL "") # TSAN is compiled against the system unwinder, which leads to false positives
+set(LIBCXX_INCLUDE_BENCHMARKS OFF CACHE BOOL "FIXME: This is a temporary workaround to get tsan running again")
\ No newline at end of file
diff --git a/libcxx/test/benchmarks/CMakeLists.txt b/libcxx/test/benchmarks/CMakeLists.txt
index 6237572657638..b0fe600623d96 100644
--- a/libcxx/test/benchmarks/CMakeLists.txt
+++ b/libcxx/test/benchmarks/CMakeLists.txt
@@ -30,7 +30,7 @@ endif()
 
 ExternalProject_Add(google-benchmark
         EXCLUDE_FROM_ALL ON
-        DEPENDS cxx cxx-headers install-cxx-test-suite-prefix
+        DEPENDS cxx cxx-headers
         PREFIX google-benchmark
         SOURCE_DIR ${LLVM_THIRD_PARTY_DIR}/benchmark
         INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/google-benchmark

>From 27e421ea24385b707ee75019149c926d66f1382a Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric at efcs.ca>
Date: Sat, 28 Jun 2025 11:53:07 -0400
Subject: [PATCH 03/12] disable all but tsan

---
 .github/workflows/libcxx-build-and-test.yaml | 236 +------------------
 1 file changed, 4 insertions(+), 232 deletions(-)

diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml
index f0bdf6c0b5899..b79dd941f08b2 100644
--- a/.github/workflows/libcxx-build-and-test.yaml
+++ b/.github/workflows/libcxx-build-and-test.yaml
@@ -34,201 +34,22 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
-  stage1:
-    if: github.repository_owner == 'llvm'
-    runs-on: libcxx-self-hosted-linux
-    container: ghcr.io/llvm/libcxx-linux-builder:b060022103f551d8ca1dad84122ef73927c86512
-    continue-on-error: false
-    strategy:
-      fail-fast: false
-      matrix:
-        config: [
-          'frozen-cxx03-headers',
-          'generic-cxx03',
-          'generic-cxx26',
-          'generic-modules'
-        ]
-        cc: [  'clang-21' ]
-        cxx: [ 'clang++-21' ]
-        include:
-          - config: 'generic-gcc'
-            cc: 'gcc-15'
-            cxx: 'g++-15'
-    steps:
-      - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
-      - name: ${{ matrix.config }}.${{ matrix.cxx }}
-        run: libcxx/utils/ci/run-buildbot ${{ matrix.config }}
-        env:
-          CC: ${{ matrix.cc }}
-          CXX: ${{ matrix.cxx }}
-      - uses: actions/upload-artifact at 26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
-        if: always()
-        with:
-          name: ${{ matrix.config }}-${{ matrix.cxx }}-results
-          path: |
-            **/test-results.xml
-            **/*.abilist
-            **/CMakeConfigureLog.yaml
-            **/CMakeError.log
-            **/CMakeOutput.log
-            **/crash_diagnostics/*
-  stage2:
-    if: github.repository_owner == 'llvm'
-    runs-on: libcxx-self-hosted-linux
-    container: ghcr.io/llvm/libcxx-linux-builder:2b57ebb50b6d418e70382e655feaa619b558e254
-    needs: [ stage1 ]
-    continue-on-error: false
-    strategy:
-      fail-fast: false
-      matrix:
-        config: [
-          'generic-cxx11',
-          'generic-cxx14',
-          'generic-cxx17',
-          'generic-cxx20',
-          'generic-cxx23'
-        ]
-        cc: [ 'clang-21' ]
-        cxx: [ 'clang++-21' ]
-        include:
-          - config: 'generic-gcc-cxx11'
-            cc: 'gcc-15'
-            cxx: 'g++-15'
-          - config: 'generic-cxx26'
-            cc: 'clang-20'
-            cxx: 'clang++-20'
-          - config: 'generic-cxx26'
-            cc: 'clang-19'
-            cxx: 'clang++-19'
-    steps:
-      - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
-      - name: ${{ matrix.config }}
-        run: libcxx/utils/ci/run-buildbot ${{ matrix.config }}
-        env:
-          CC: ${{ matrix.cc }}
-          CXX: ${{ matrix.cxx }}
-      - uses: actions/upload-artifact at 26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
-        if: always()  # Upload artifacts even if the build or test suite fails
-        with:
-          name: ${{ matrix.config }}-${{ matrix.cxx }}-results
-          path: |
-            **/test-results.xml
-            **/*.abilist
-            **/CMakeConfigureLog.yaml
-            **/CMakeError.log
-            **/CMakeOutput.log
-            **/crash_diagnostics/*
   stage3:
     if: github.repository_owner == 'llvm'
-    needs: [ stage2 ]
     continue-on-error: false
-    strategy:
-      fail-fast: false
-      max-parallel: 8
-      matrix:
-        config: [
-          'generic-abi-unstable',
-          'generic-hardening-mode-debug',
-          'generic-hardening-mode-extensive',
-          'generic-hardening-mode-fast',
-          'generic-hardening-mode-fast-with-abi-breaks',
-          'generic-merged',
-          'generic-modules-cxx17-lsv',
-          'generic-no-exceptions',
-          'generic-no-experimental',
-          'generic-no-filesystem',
-          'generic-no-localization',
-          'generic-no-terminal',
-          'generic-no-random_device',
-          'generic-no-threads',
-          'generic-no-tzdb',
-          'generic-no-unicode',
-          'generic-no-wide-characters',
-          'generic-no-rtti',
-          'generic-optimized-speed',
-          'generic-static',
-          'bootstrapping-build'
-        ]
-        machine: [ 'libcxx-self-hosted-linux' ]
-        include:
-        - config: 'generic-cxx26'
-          machine: libcxx-self-hosted-linux
-        - config: 'generic-asan'
-          machine: libcxx-self-hosted-linux
-        - config: 'generic-tsan'
-          machine: libcxx-self-hosted-linux
-        - config: 'generic-ubsan'
-          machine: libcxx-self-hosted-linux
-        # Use a larger machine for MSAN to avoid timeout and memory allocation issues.
-        - config: 'generic-msan'
-          machine: libcxx-self-hosted-linux
-    runs-on: ${{ matrix.machine }}
+    runs-on: libcxx-self-hosted-linux
     container: ghcr.io/llvm/libcxx-linux-builder:2b57ebb50b6d418e70382e655feaa619b558e254
     steps:
       - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
-      - name: ${{ matrix.config }}
-        run: libcxx/utils/ci/run-buildbot ${{ matrix.config }}
+      - name: generic-tsan
+        run: libcxx/utils/ci/run-buildbot generic-tsan
         env:
           CC: clang-21
           CXX: clang++-21
       - uses: actions/upload-artifact at 26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
         if: always()
         with:
-          name: ${{ matrix.config }}-results
-          path: |
-            **/test-results.xml
-            **/*.abilist
-            **/CMakeConfigureLog.yaml
-            **/CMakeError.log
-            **/CMakeOutput.log
-            **/crash_diagnostics/*
-
-  macos:
-    needs: [ stage2 ]
-    strategy:
-      fail-fast: false
-      matrix:
-        include:
-        - config: generic-cxx03
-          os: macos-15
-        - config: generic-cxx23
-          os: macos-15
-        - config: generic-modules
-          os: macos-15
-        - config: apple-configuration
-          os: macos-15
-        # TODO: These jobs are intended to test back-deployment (building against ToT libc++ but running against an
-        #       older system-provided libc++.dylib). Doing this properly would require building the test suite on a
-        #       recent macOS using a recent Clang (hence recent Xcode), and then running the actual test suite on an
-        #       older mac. We could do that by e.g. sharing artifacts between the two jobs.
-        #
-        #       However, our Lit configuration currently doesn't provide a good way to do that in a batch, so our only
-        #       alternative is to actually build on the same host that we're going to run on. Sadly, that doesn't work
-        #       since older macOSes don't support newer Xcodes. For now, we run the "backdeployment" jobs on recent
-        #       macOS versions as a way to avoid rotting that configuration, but it doesn't provide a lot of additional
-        #       coverage.
-        - config: apple-system
-          os: macos-15
-        - config: apple-system-hardened
-          os: macos-15
-    runs-on: ${{ matrix.os }}
-    steps:
-      - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
-      - uses: maxim-lobanov/setup-xcode at 60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
-        with:
-          # https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md
-          xcode-version: '16.3'
-      - uses: seanmiddleditch/gha-setup-ninja at 3b1f8f94a2f8254bd26914c4ab9474d4f0015f67 # v6
-      - name: Build and test
-        run: |
-          python3 -m venv .venv
-          source .venv/bin/activate
-          python -m pip install psutil
-          bash libcxx/utils/ci/run-buildbot ${{ matrix.config }}
-      - uses: actions/upload-artifact at 26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
-        if: always()  # Upload artifacts even if the build or test suite fails
-        with:
-          name: macos-${{ matrix.config }}-results
+          name: generic-tsan-results
           path: |
             **/test-results.xml
             **/*.abilist
@@ -237,52 +58,3 @@ jobs:
             **/CMakeOutput.log
             **/crash_diagnostics/*
 
-  windows:
-    runs-on: windows-2022
-    needs: [ stage2 ]
-    strategy:
-      fail-fast: false
-      matrix:
-        include:
-        - { config: clang-cl-dll, mingw: false }
-        - { config: clang-cl-static, mingw: false }
-        - { config: clang-cl-no-vcruntime, mingw: false }
-        - { config: clang-cl-debug, mingw: false }
-        - { config: clang-cl-static-crt, mingw: false }
-        - { config: mingw-dll, mingw: true }
-        - { config: mingw-static, mingw: true }
-        - { config: mingw-dll-i686, mingw: true }
-        - { config: mingw-incomplete-sysroot, mingw: true }
-    steps:
-      - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
-      - name: Install dependencies
-        run: |
-          choco install -y ninja
-          pip install psutil
-      - name: Install a current LLVM
-        if: ${{ matrix.mingw != true }}
-        run: |
-          choco install -y llvm --version=19.1.7 --allow-downgrade
-      - name: Install llvm-mingw
-        if: ${{ matrix.mingw == true }}
-        run: |
-          curl -LO https://github.com/mstorsjo/llvm-mingw/releases/download/20250114/llvm-mingw-20250114-ucrt-x86_64.zip
-          powershell Expand-Archive llvm-mingw*.zip -DestinationPath .
-          del llvm-mingw*.zip
-          mv llvm-mingw* c:\llvm-mingw
-          echo "c:\llvm-mingw\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
-      - name: Simulate a from-scratch build of llvm-mingw
-        if: ${{ matrix.config == 'mingw-incomplete-sysroot' }}
-        run: |
-          rm -r c:\llvm-mingw\include\c++
-          rm -r c:\llvm-mingw\*-w64-mingw32\lib\libc++*
-          rm -r c:\llvm-mingw\*-w64-mingw32\lib\libunwind*
-      - name: Add Git Bash to the path
-        run: |
-          echo "c:\Program Files\Git\usr\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
-      - name: Set up the MSVC dev environment
-        if: ${{ matrix.mingw != true }}
-        uses: ilammy/msvc-dev-cmd at 0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
-      - name: Build and test
-        run: |
-          bash libcxx/utils/ci/run-buildbot ${{ matrix.config }}

>From c7480312a4b936a08be7c14ef864a90ac118a425 Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric at efcs.ca>
Date: Sat, 28 Jun 2025 12:10:57 -0400
Subject: [PATCH 04/12] try setting mmap settings

---
 .github/workflows/libcxx-build-and-test.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml
index b79dd941f08b2..6872d5aa16f3f 100644
--- a/.github/workflows/libcxx-build-and-test.yaml
+++ b/.github/workflows/libcxx-build-and-test.yaml
@@ -42,7 +42,7 @@ jobs:
     steps:
       - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
       - name: generic-tsan
-        run: libcxx/utils/ci/run-buildbot generic-tsan
+        run: sudo sysctl vm.mmap_rnd_bits=30 && libcxx/utils/ci/run-buildbot generic-tsan
         env:
           CC: clang-21
           CXX: clang++-21

>From 4a5e46c7f7865b93d94e92bc4016e4eb033a785d Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric at efcs.ca>
Date: Sat, 28 Jun 2025 12:26:47 -0400
Subject: [PATCH 05/12] try fudging with more flags

---
 .github/workflows/libcxx-build-and-test.yaml | 2 +-
 libcxx/utils/libcxx/test/params.py           | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml
index 6872d5aa16f3f..7318bef43e9f0 100644
--- a/.github/workflows/libcxx-build-and-test.yaml
+++ b/.github/workflows/libcxx-build-and-test.yaml
@@ -42,7 +42,7 @@ jobs:
     steps:
       - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
       - name: generic-tsan
-        run: sudo sysctl vm.mmap_rnd_bits=30 && libcxx/utils/ci/run-buildbot generic-tsan
+        run: sudo sysctl vm.mmap_rnd_bits=32; libcxx/utils/ci/run-buildbot generic-tsan
         env:
           CC: clang-21
           CXX: clang++-21
diff --git a/libcxx/utils/libcxx/test/params.py b/libcxx/utils/libcxx/test/params.py
index fc34009d0a551..8c34b588aec4e 100644
--- a/libcxx/utils/libcxx/test/params.py
+++ b/libcxx/utils/libcxx/test/params.py
@@ -330,7 +330,7 @@ def getSuitableClangTidy(cfg):
                 AddFeature("msan")                         if sanitizer in ["Memory", "MemoryWithOrigins"] else None,
                 AddFlag("-fsanitize-memory-track-origins") if sanitizer == "MemoryWithOrigins" else None,
 
-                AddFlag("-fsanitize=thread") if sanitizer == "Thread" else None,
+                AddFlag("-fsanitize=thread -fno-sanitize-recover=all -g -O1") if sanitizer == "Thread" else None,
                 AddFeature("tsan")           if sanitizer == "Thread" else None,
 
                 AddFlag("-fsanitize=dataflow") if sanitizer == "DataFlow" else None,

>From a590d966dfb21cab8bf86b97d43fc9dbaf84c249 Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric at efcs.ca>
Date: Sat, 28 Jun 2025 12:53:05 -0400
Subject: [PATCH 06/12] remove redundant flags

---
 libcxx/utils/libcxx/test/params.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libcxx/utils/libcxx/test/params.py b/libcxx/utils/libcxx/test/params.py
index 8c34b588aec4e..e187ffa44a9e5 100644
--- a/libcxx/utils/libcxx/test/params.py
+++ b/libcxx/utils/libcxx/test/params.py
@@ -330,7 +330,7 @@ def getSuitableClangTidy(cfg):
                 AddFeature("msan")                         if sanitizer in ["Memory", "MemoryWithOrigins"] else None,
                 AddFlag("-fsanitize-memory-track-origins") if sanitizer == "MemoryWithOrigins" else None,
 
-                AddFlag("-fsanitize=thread -fno-sanitize-recover=all -g -O1") if sanitizer == "Thread" else None,
+                AddFlag("-fsanitize=thread -fno-sanitize-recover=all  -O1") if sanitizer == "Thread" else None,
                 AddFeature("tsan")           if sanitizer == "Thread" else None,
 
                 AddFlag("-fsanitize=dataflow") if sanitizer == "DataFlow" else None,

>From 4b1e998dc3d28f1c9021a1de6aef76bf0be03d2c Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric at efcs.ca>
Date: Sat, 28 Jun 2025 13:16:16 -0400
Subject: [PATCH 07/12] try more workarounds

---
 .github/workflows/libcxx-build-and-test.yaml                 | 2 +-
 libcxx/test/std/thread/futures/futures.async/async.pass.cpp  | 1 -
 .../thread/futures/futures.async/wait_on_destruct.pass.cpp   | 5 +++--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml
index 7318bef43e9f0..da4295fe94f97 100644
--- a/.github/workflows/libcxx-build-and-test.yaml
+++ b/.github/workflows/libcxx-build-and-test.yaml
@@ -42,7 +42,7 @@ jobs:
     steps:
       - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
       - name: generic-tsan
-        run: sudo sysctl vm.mmap_rnd_bits=32; libcxx/utils/ci/run-buildbot generic-tsan
+        run: sudo sysctl vm.mmap_rnd_bits=30 && ulimit -s 16000000; libcxx/utils/ci/run-buildbot generic-tsan
         env:
           CC: clang-21
           CXX: clang++-21
diff --git a/libcxx/test/std/thread/futures/futures.async/async.pass.cpp b/libcxx/test/std/thread/futures/futures.async/async.pass.cpp
index 109372b50a311..2bbfaa37915a8 100644
--- a/libcxx/test/std/thread/futures/futures.async/async.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.async/async.pass.cpp
@@ -9,7 +9,6 @@
 // UNSUPPORTED: no-threads
 // UNSUPPORTED: c++03
 
-// ALLOW_RETRIES: 3
 
 // <future>
 
diff --git a/libcxx/test/std/thread/futures/futures.async/wait_on_destruct.pass.cpp b/libcxx/test/std/thread/futures/futures.async/wait_on_destruct.pass.cpp
index 8260ec3dfcaf4..2b98d265b55fc 100644
--- a/libcxx/test/std/thread/futures/futures.async/wait_on_destruct.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.async/wait_on_destruct.pass.cpp
@@ -22,17 +22,18 @@
 #include <mutex>
 
 std::mutex mux;
+std::atomic<bool> in_async = false;
 
 int main(int, char**) {
   using namespace std::chrono_literals;
   std::unique_lock lock(mux);
-  std::atomic<bool> in_async = false;
+
   auto v                     = std::async(std::launch::async, [&in_async, value = 1]() mutable {
     in_async = true;
     in_async.notify_all();
     std::scoped_lock thread_lock(mux);
     value = 4;
-    (void)value;
+    return value;
   });
   in_async.wait(true);
   lock.unlock();

>From 5389f4fe2abe8759b56eb8b45636f681a13773e6 Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric at efcs.ca>
Date: Sat, 28 Jun 2025 13:24:03 -0400
Subject: [PATCH 08/12] try different flags

---
 .github/workflows/libcxx-build-and-test.yaml              | 2 +-
 .../futures/futures.async/wait_on_destruct.pass.cpp       | 8 +++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml
index da4295fe94f97..95b91d9b2f9a0 100644
--- a/.github/workflows/libcxx-build-and-test.yaml
+++ b/.github/workflows/libcxx-build-and-test.yaml
@@ -42,7 +42,7 @@ jobs:
     steps:
       - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
       - name: generic-tsan
-        run: sudo sysctl vm.mmap_rnd_bits=30 && ulimit -s 16000000; libcxx/utils/ci/run-buildbot generic-tsan
+        run: sudo sysctl vm.mmap_rnd_bits=32 && ulimit -s 16000000; libcxx/utils/ci/run-buildbot generic-tsan
         env:
           CC: clang-21
           CXX: clang++-21
diff --git a/libcxx/test/std/thread/futures/futures.async/wait_on_destruct.pass.cpp b/libcxx/test/std/thread/futures/futures.async/wait_on_destruct.pass.cpp
index 2b98d265b55fc..9b3377ec06794 100644
--- a/libcxx/test/std/thread/futures/futures.async/wait_on_destruct.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.async/wait_on_destruct.pass.cpp
@@ -20,20 +20,22 @@
 #include <atomic>
 #include <future>
 #include <mutex>
+#include <thread>
+#include <chrono>
 
 std::mutex mux;
-std::atomic<bool> in_async = false;
 
 int main(int, char**) {
   using namespace std::chrono_literals;
   std::unique_lock lock(mux);
-
+  std::atomic<bool> in_async = false;
   auto v                     = std::async(std::launch::async, [&in_async, value = 1]() mutable {
     in_async = true;
     in_async.notify_all();
+    std::this_thread::sleep_for(std::chrono::seconds(1));
     std::scoped_lock thread_lock(mux);
     value = 4;
-    return value;
+    (void)value;
   });
   in_async.wait(true);
   lock.unlock();

>From 04a519883b300a63c8ee47262c80f57dc1b7b056 Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric at efcs.ca>
Date: Sat, 28 Jun 2025 13:42:01 -0400
Subject: [PATCH 09/12] try again

---
 .github/workflows/libcxx-build-and-test.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml
index 95b91d9b2f9a0..da4295fe94f97 100644
--- a/.github/workflows/libcxx-build-and-test.yaml
+++ b/.github/workflows/libcxx-build-and-test.yaml
@@ -42,7 +42,7 @@ jobs:
     steps:
       - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
       - name: generic-tsan
-        run: sudo sysctl vm.mmap_rnd_bits=32 && ulimit -s 16000000; libcxx/utils/ci/run-buildbot generic-tsan
+        run: sudo sysctl vm.mmap_rnd_bits=30 && ulimit -s 16000000; libcxx/utils/ci/run-buildbot generic-tsan
         env:
           CC: clang-21
           CXX: clang++-21

>From 8fb76449dc76f89d7e77f065958d233308b42817 Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric at efcs.ca>
Date: Sat, 28 Jun 2025 15:04:17 -0400
Subject: [PATCH 10/12] try another thing

---
 .github/workflows/libcxx-build-and-test.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml
index da4295fe94f97..e864d55a55869 100644
--- a/.github/workflows/libcxx-build-and-test.yaml
+++ b/.github/workflows/libcxx-build-and-test.yaml
@@ -42,7 +42,7 @@ jobs:
     steps:
       - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
       - name: generic-tsan
-        run: sudo sysctl vm.mmap_rnd_bits=30 && ulimit -s 16000000; libcxx/utils/ci/run-buildbot generic-tsan
+        run: ulimit -s unlimited; libcxx/utils/ci/run-buildbot generic-tsan
         env:
           CC: clang-21
           CXX: clang++-21

>From 67795556e4bdf180fde317b3130268f916b28344 Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric at efcs.ca>
Date: Sat, 28 Jun 2025 15:05:28 -0400
Subject: [PATCH 11/12] fix whitespace

---
 libcxx/test/std/thread/futures/futures.async/async.pass.cpp | 1 -
 1 file changed, 1 deletion(-)

diff --git a/libcxx/test/std/thread/futures/futures.async/async.pass.cpp b/libcxx/test/std/thread/futures/futures.async/async.pass.cpp
index 2bbfaa37915a8..b568c5e7fcfe3 100644
--- a/libcxx/test/std/thread/futures/futures.async/async.pass.cpp
+++ b/libcxx/test/std/thread/futures/futures.async/async.pass.cpp
@@ -9,7 +9,6 @@
 // UNSUPPORTED: no-threads
 // UNSUPPORTED: c++03
 
-
 // <future>
 
 // template <class F, class... Args>

>From ddd070d4464076171d11eb03eafcd771fc512c54 Mon Sep 17 00:00:00 2001
From: Eric Fiselier <eric at efcs.ca>
Date: Sat, 28 Jun 2025 15:12:47 -0400
Subject: [PATCH 12/12] try again; this time with the config we think works

---
 .github/workflows/libcxx-build-and-test.yaml | 2 +-
 libcxx/cmake/caches/Generic-tsan.cmake       | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml
index e864d55a55869..f13aac945a241 100644
--- a/.github/workflows/libcxx-build-and-test.yaml
+++ b/.github/workflows/libcxx-build-and-test.yaml
@@ -42,7 +42,7 @@ jobs:
     steps:
       - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
       - name: generic-tsan
-        run: ulimit -s unlimited; libcxx/utils/ci/run-buildbot generic-tsan
+        run: sudo sysctl vm.mmap_rnd_bits=30; libcxx/utils/ci/run-buildbot generic-tsan
         env:
           CC: clang-21
           CXX: clang++-21
diff --git a/libcxx/cmake/caches/Generic-tsan.cmake b/libcxx/cmake/caches/Generic-tsan.cmake
index de4a76d7842ea..18d5fd9a0e896 100644
--- a/libcxx/cmake/caches/Generic-tsan.cmake
+++ b/libcxx/cmake/caches/Generic-tsan.cmake
@@ -1,3 +1,2 @@
 set(LLVM_USE_SANITIZER "Thread" CACHE STRING "")
-set(LIBCXXABI_USE_LLVM_UNWINDER OFF CACHE BOOL "") # TSAN is compiled against the system unwinder, which leads to false positives
-set(LIBCXX_INCLUDE_BENCHMARKS OFF CACHE BOOL "FIXME: This is a temporary workaround to get tsan running again")
\ No newline at end of file
+set(LIBCXXABI_USE_LLVM_UNWINDER OFF CACHE BOOL "") # TSAN is compiled against the system unwinder, which leads to false positives
\ No newline at end of file



More information about the llvm-commits mailing list