[libcxx-commits] [libcxx] [libc++][test-suite][NFC] Refactor `unused_variables` tests (PR #223234)

Hristo Hristov via libcxx-commits libcxx-commits at lists.llvm.org
Mon Sep 14 05:28:45 PDT 2026


https://github.com/H-G-Hristov updated https://github.com/llvm/llvm-project/pull/223234

>From f19ee70bb02e192e1685df60572d3e80f2dc3651 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sun, 13 Sep 2026 14:29:18 +0300
Subject: [PATCH 1/9] [libc++][test-suite][NFC] Move `unused_variables` tests

`diagnostics` is a section in The Standard. According to libc++ test-suite organization `libcxx/test/libcxx/diagnostics/` should contain related tests.

The following tests should live in `libcxx/test/libcxx/containers`:
  `unused_variables.compile.pass.cpp`
  `unused_variables.verify.cpp`
---
 .../{diagnostics => containers}/unused_variables.compile.pass.cpp | 0
 .../{diagnostics => containers}/unused_variables.verify.cpp       | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename libcxx/test/libcxx/{diagnostics => containers}/unused_variables.compile.pass.cpp (100%)
 rename libcxx/test/libcxx/{diagnostics => containers}/unused_variables.verify.cpp (100%)

diff --git a/libcxx/test/libcxx/diagnostics/unused_variables.compile.pass.cpp b/libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/unused_variables.compile.pass.cpp
rename to libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp
diff --git a/libcxx/test/libcxx/diagnostics/unused_variables.verify.cpp b/libcxx/test/libcxx/containers/unused_variables.verify.cpp
similarity index 100%
rename from libcxx/test/libcxx/diagnostics/unused_variables.verify.cpp
rename to libcxx/test/libcxx/containers/unused_variables.verify.cpp

>From 18835e96af2c06ffcbf8cbd2a99e49039c3f6102 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sun, 13 Sep 2026 14:40:27 +0300
Subject: [PATCH 2/9] Split test

---
 .../containers/unused_variables.verify.cpp    | 52 ---------------
 .../libcxx/thread/unused_variables.verify.cpp | 64 +++++++++++++++++++
 2 files changed, 64 insertions(+), 52 deletions(-)
 create mode 100644 libcxx/test/libcxx/thread/unused_variables.verify.cpp

diff --git a/libcxx/test/libcxx/containers/unused_variables.verify.cpp b/libcxx/test/libcxx/containers/unused_variables.verify.cpp
index bfeb60d9bb6f0..c7c90d58777f2 100644
--- a/libcxx/test/libcxx/containers/unused_variables.verify.cpp
+++ b/libcxx/test/libcxx/containers/unused_variables.verify.cpp
@@ -9,18 +9,11 @@
 // Make sure that we warn on unused variables of libc++ classes which behave like value types.
 // ADDITIONAL_COMPILE_FLAGS: -Wunused-variable
 
-#include <barrier>
-#include <condition_variable>
 #include <deque>
 #include <forward_list>
-#include <latch>
 #include <list>
 #include <map>
-#include <mutex>
-#include <semaphore>
 #include <set>
-#include <shared_mutex>
-#include <string>
 #include <unordered_map>
 #include <unordered_set>
 #include <vector>
@@ -77,48 +70,3 @@ void container_const_iterators() {
   std::vector<int>::const_iterator m;                  // expected-warning {{unused variable}}
   std::vector<bool>::const_iterator n;                 // expected-warning {{unused variable}}
 }
-
-#ifndef TEST_HAS_NO_THREADS
-void synchronization(std::mutex& m) {
-  // <mutex>
-  std::mutex a;                      // expected-warning {{unused variable}}
-  std::once_flag b;                  // expected-warning {{unused variable}}
-  std::recursive_mutex c;            // expected-warning {{unused variable}}
-  std::recursive_timed_mutex d;      // expected-warning {{unused variable}}
-  std::timed_mutex e;                // expected-warning {{unused variable}}
-  std::unique_lock<std::mutex> f;    // This is https://llvm.org/PR222655
-  std::unique_lock<std::mutex> g(m); // Shouldn't be diagnosed
-#  if TEST_STD_VER >= 17
-  std::unique_lock<std::mutex> h(m, std::defer_lock); // This is https://llvm.org/PR222655
-#  endif
-
-  // <condition_variable>
-  std::condition_variable i;     // expected-warning {{unused variable}}
-  std::condition_variable_any j; // expected-warning {{unused variable}}
-
-#  if TEST_STD_VER >= 20
-  // <semaphore>
-  std::counting_semaphore<> k(1); // expected-warning {{unused variable}}
-#  endif
-
-  // <shared_mutex>
-#  if TEST_STD_VER >= 17
-  std::shared_mutex l; // expected-warning {{unused variable}}
-#  endif
-#  if TEST_STD_VER >= 14
-  std::shared_timed_mutex n; // expected-warning {{unused variable}}
-  std::shared_timed_mutex n2;
-  std::shared_lock<std::shared_timed_mutex> o;                      // This is https://llvm.org/PR222655
-  std::shared_lock<std::shared_timed_mutex> p(n2);                  // Shouldn't be diagnosed
-  std::shared_lock<std::shared_timed_mutex> q(n2, std::defer_lock); // This is https://llvm.org/PR222655
-#  endif
-
-#  if TEST_STD_VER >= 20
-  // <barrier>
-  std::barrier<> r(1); // expected-warning {{unused variable}}
-
-  // <latch>
-  std::latch s(1); // expected-warning {{unused variable}}
-#  endif
-}
-#endif // TEST_HAS_NO_THREADS
diff --git a/libcxx/test/libcxx/thread/unused_variables.verify.cpp b/libcxx/test/libcxx/thread/unused_variables.verify.cpp
new file mode 100644
index 0000000000000..0db58b42fb6ce
--- /dev/null
+++ b/libcxx/test/libcxx/thread/unused_variables.verify.cpp
@@ -0,0 +1,64 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: no-threads
+
+// Make sure that we warn on unused variables of libc++ classes which behave like value types.
+// ADDITIONAL_COMPILE_FLAGS: -Wunused-variable
+
+#include <barrier>
+#include <condition_variable>
+#include <latch>
+#include <mutex>
+#include <semaphore>
+#include <shared_mutex>
+
+#include "test_macros.h"
+
+void synchronization(std::mutex& m) {
+  // <mutex>
+  std::mutex a;                      // expected-warning {{unused variable}}
+  std::once_flag b;                  // expected-warning {{unused variable}}
+  std::recursive_mutex c;            // expected-warning {{unused variable}}
+  std::recursive_timed_mutex d;      // expected-warning {{unused variable}}
+  std::timed_mutex e;                // expected-warning {{unused variable}}
+  std::unique_lock<std::mutex> f;    // This is https://llvm.org/PR222655
+  std::unique_lock<std::mutex> g(m); // Shouldn't be diagnosed
+#  if TEST_STD_VER >= 17
+  std::unique_lock<std::mutex> h(m, std::defer_lock); // This is https://llvm.org/PR222655
+#  endif
+
+  // <condition_variable>
+  std::condition_variable i;     // expected-warning {{unused variable}}
+  std::condition_variable_any j; // expected-warning {{unused variable}}
+
+#  if TEST_STD_VER >= 20
+  // <semaphore>
+  std::counting_semaphore<> k(1); // expected-warning {{unused variable}}
+#  endif
+
+  // <shared_mutex>
+#  if TEST_STD_VER >= 17
+  std::shared_mutex l; // expected-warning {{unused variable}}
+#  endif
+#  if TEST_STD_VER >= 14
+  std::shared_timed_mutex n; // expected-warning {{unused variable}}
+  std::shared_timed_mutex n2;
+  std::shared_lock<std::shared_timed_mutex> o;                      // This is https://llvm.org/PR222655
+  std::shared_lock<std::shared_timed_mutex> p(n2);                  // Shouldn't be diagnosed
+  std::shared_lock<std::shared_timed_mutex> q(n2, std::defer_lock); // This is https://llvm.org/PR222655
+#  endif
+
+#  if TEST_STD_VER >= 20
+  // <barrier>
+  std::barrier<> r(1); // expected-warning {{unused variable}}
+
+  // <latch>
+  std::latch s(1); // expected-warning {{unused variable}}
+#  endif
+}

>From 77df50a26b47d4e0ec6080a545bfcdbc0c00bf50 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sun, 13 Sep 2026 14:43:24 +0300
Subject: [PATCH 3/9] format

---
 .../libcxx/thread/unused_variables.verify.cpp | 20 +++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/libcxx/test/libcxx/thread/unused_variables.verify.cpp b/libcxx/test/libcxx/thread/unused_variables.verify.cpp
index 0db58b42fb6ce..33c4e74ac0a5a 100644
--- a/libcxx/test/libcxx/thread/unused_variables.verify.cpp
+++ b/libcxx/test/libcxx/thread/unused_variables.verify.cpp
@@ -29,36 +29,36 @@ void synchronization(std::mutex& m) {
   std::timed_mutex e;                // expected-warning {{unused variable}}
   std::unique_lock<std::mutex> f;    // This is https://llvm.org/PR222655
   std::unique_lock<std::mutex> g(m); // Shouldn't be diagnosed
-#  if TEST_STD_VER >= 17
+#if TEST_STD_VER >= 17
   std::unique_lock<std::mutex> h(m, std::defer_lock); // This is https://llvm.org/PR222655
-#  endif
+#endif
 
   // <condition_variable>
   std::condition_variable i;     // expected-warning {{unused variable}}
   std::condition_variable_any j; // expected-warning {{unused variable}}
 
-#  if TEST_STD_VER >= 20
+#if TEST_STD_VER >= 20
   // <semaphore>
   std::counting_semaphore<> k(1); // expected-warning {{unused variable}}
-#  endif
+#endif
 
   // <shared_mutex>
-#  if TEST_STD_VER >= 17
+#if TEST_STD_VER >= 17
   std::shared_mutex l; // expected-warning {{unused variable}}
-#  endif
-#  if TEST_STD_VER >= 14
+#endif
+#if TEST_STD_VER >= 14
   std::shared_timed_mutex n; // expected-warning {{unused variable}}
   std::shared_timed_mutex n2;
   std::shared_lock<std::shared_timed_mutex> o;                      // This is https://llvm.org/PR222655
   std::shared_lock<std::shared_timed_mutex> p(n2);                  // Shouldn't be diagnosed
   std::shared_lock<std::shared_timed_mutex> q(n2, std::defer_lock); // This is https://llvm.org/PR222655
-#  endif
+#endif
 
-#  if TEST_STD_VER >= 20
+#if TEST_STD_VER >= 20
   // <barrier>
   std::barrier<> r(1); // expected-warning {{unused variable}}
 
   // <latch>
   std::latch s(1); // expected-warning {{unused variable}}
-#  endif
+#endif
 }

>From db957fe3fe4595fc27281420c160f79392574abb Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sun, 13 Sep 2026 21:08:26 +0300
Subject: [PATCH 4/9] Fixes

---
 .../containers/unused_variables.verify.cpp    |  3 ---
 .../strings/unused_variables.compile.pass.cpp | 25 +++++++++++++++++++
 .../strings/unused_variables.verify.cpp       | 18 +++++++++++++
 3 files changed, 43 insertions(+), 3 deletions(-)
 create mode 100644 libcxx/test/libcxx/strings/unused_variables.compile.pass.cpp
 create mode 100644 libcxx/test/libcxx/strings/unused_variables.verify.cpp

diff --git a/libcxx/test/libcxx/containers/unused_variables.verify.cpp b/libcxx/test/libcxx/containers/unused_variables.verify.cpp
index c7c90d58777f2..67ab8a20724b6 100644
--- a/libcxx/test/libcxx/containers/unused_variables.verify.cpp
+++ b/libcxx/test/libcxx/containers/unused_variables.verify.cpp
@@ -32,7 +32,6 @@ void containers() {
   std::unordered_multimap<int, int> i; // expected-warning {{unused variable}}
   std::unordered_set<int> j;           // expected-warning {{unused variable}}
   std::unordered_multiset<int> k;      // expected-warning {{unused variable}}
-  std::string l;                       // expected-warning {{unused variable}}
   std::vector<int> m;                  // expected-warning {{unused variable}}
   std::vector<bool> n;                 // expected-warning {{unused variable}}
 }
@@ -49,7 +48,6 @@ void container_iterators() {
   std::unordered_multimap<int, int>::iterator i; // expected-warning {{unused variable}}
   std::unordered_set<int>::iterator j;           // expected-warning {{unused variable}}
   std::unordered_multiset<int>::iterator k;      // expected-warning {{unused variable}}
-  std::string::iterator l;                       // expected-warning {{unused variable}}
   std::vector<int>::iterator m;                  // expected-warning {{unused variable}}
   std::vector<bool>::iterator n;                 // expected-warning {{unused variable}}
 }
@@ -66,7 +64,6 @@ void container_const_iterators() {
   std::unordered_multimap<int, int>::const_iterator i; // expected-warning {{unused variable}}
   std::unordered_set<int>::const_iterator j;           // expected-warning {{unused variable}}
   std::unordered_multiset<int>::const_iterator k;      // expected-warning {{unused variable}}
-  std::string::const_iterator l;                       // expected-warning {{unused variable}}
   std::vector<int>::const_iterator m;                  // expected-warning {{unused variable}}
   std::vector<bool>::const_iterator n;                 // expected-warning {{unused variable}}
 }
diff --git a/libcxx/test/libcxx/strings/unused_variables.compile.pass.cpp b/libcxx/test/libcxx/strings/unused_variables.compile.pass.cpp
new file mode 100644
index 0000000000000..de27ea80d773d
--- /dev/null
+++ b/libcxx/test/libcxx/strings/unused_variables.compile.pass.cpp
@@ -0,0 +1,25 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Make sure that we don't introduce new warnings on unused variables of libc++ classes if
+// _LIBCPP_DISABLE_UNUSED_STRUCT_WARNINGS is set.
+
+// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_UNUSED_STRUCT_WARNINGS
+
+#include <string>
+
+#include "test_macros.h"
+
+void strings() {
+  std::string l;
+
+#if TEST_STD_VER <= 11
+  std::string::iterator l;
+  std::string::const_iterator l;
+#endif
+}
diff --git a/libcxx/test/libcxx/strings/unused_variables.verify.cpp b/libcxx/test/libcxx/strings/unused_variables.verify.cpp
new file mode 100644
index 0000000000000..3e7bbf7f8d3b2
--- /dev/null
+++ b/libcxx/test/libcxx/strings/unused_variables.verify.cpp
@@ -0,0 +1,18 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Make sure that we warn on unused variables of libc++ classes which behave like value types.
+// ADDITIONAL_COMPILE_FLAGS: -Wunused-variable
+
+#include <string>
+
+void strings() {
+  std::string l;                 // expected-warning {{unused variable}}
+  std::string::iterator l;       // expected-warning {{unused variable}}
+  std::string::const_iterator l; // expected-warning {{unused variable}}
+}

>From e3e6f6433dcaa27d2a1d26b3664eb0f4791e0ebd Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sun, 13 Sep 2026 21:11:06 +0300
Subject: [PATCH 5/9] Cleanup

---
 .../test/libcxx/containers/unused_variables.compile.pass.cpp   | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp b/libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp
index cbcaf6a920e24..f49367536978e 100644
--- a/libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp
+++ b/libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp
@@ -16,7 +16,6 @@
 #include <list>
 #include <map>
 #include <set>
-#include <string>
 #include <unordered_map>
 #include <unordered_set>
 #include <vector>
@@ -35,7 +34,6 @@ void containers() {
   std::unordered_multimap<int, int> i;
   std::unordered_set<int> j;
   std::unordered_multiset<int> k;
-  std::string l;
   std::vector<int> m;
   std::vector<bool> n;
 }
@@ -78,7 +76,6 @@ void container_const_iterators() {
   std::unordered_set<int>::const_iterator j;
   std::unordered_multiset<int>::const_iterator k;
 #if TEST_STD_VER <= 11
-  std::string::const_iterator l;
   std::vector<int>::const_iterator m;
 #endif
 #if TEST_STD_VER <= 17

>From 07b8bba8a15accfba4674e60a70ab8fcec2f177e Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sun, 13 Sep 2026 21:34:39 +0300
Subject: [PATCH 6/9] Fix

---
 .../libcxx/strings/unused_variables.compile.pass.cpp   |  9 +++++++--
 libcxx/test/libcxx/strings/unused_variables.verify.cpp | 10 ++++++++--
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/libcxx/test/libcxx/strings/unused_variables.compile.pass.cpp b/libcxx/test/libcxx/strings/unused_variables.compile.pass.cpp
index de27ea80d773d..a9d520385271a 100644
--- a/libcxx/test/libcxx/strings/unused_variables.compile.pass.cpp
+++ b/libcxx/test/libcxx/strings/unused_variables.compile.pass.cpp
@@ -15,11 +15,16 @@
 
 #include "test_macros.h"
 
-void strings() {
-  std::string l;
+void strings() { std::string l; }
 
+void strings_iterators() {
 #if TEST_STD_VER <= 11
   std::string::iterator l;
+#endif
+}
+
+void strings_const_iterators() {
+#if TEST_STD_VER <= 11
   std::string::const_iterator l;
 #endif
 }
diff --git a/libcxx/test/libcxx/strings/unused_variables.verify.cpp b/libcxx/test/libcxx/strings/unused_variables.verify.cpp
index 3e7bbf7f8d3b2..04c372b000e78 100644
--- a/libcxx/test/libcxx/strings/unused_variables.verify.cpp
+++ b/libcxx/test/libcxx/strings/unused_variables.verify.cpp
@@ -12,7 +12,13 @@
 #include <string>
 
 void strings() {
-  std::string l;                 // expected-warning {{unused variable}}
-  std::string::iterator l;       // expected-warning {{unused variable}}
+  std::string l; // expected-warning {{unused variable}}
+}
+
+void strings_iterators() {
+  std::string::iterator l; // expected-warning {{unused variable}}
+}
+
+void strings_const_iterators() {
   std::string::const_iterator l; // expected-warning {{unused variable}}
 }

>From fd93ba7571ef0e6e2edfe41118028b2032ddce77 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sun, 13 Sep 2026 22:21:20 +0300
Subject: [PATCH 7/9] Fix

---
 libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp | 1 -
 1 file changed, 1 deletion(-)

diff --git a/libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp b/libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp
index f49367536978e..52a1fb5a20902 100644
--- a/libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp
+++ b/libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp
@@ -53,7 +53,6 @@ void container_iterators() {
   std::unordered_set<int>::iterator j;
   std::unordered_multiset<int>::iterator k;
 #if TEST_STD_VER <= 11
-  std::string::iterator l;
   std::vector<int>::iterator m;
 #endif
 #if TEST_STD_VER <= 17

>From 3188163cb9b61f2aee5f69207f4d3df34486c29f Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 14 Sep 2026 15:27:08 +0300
Subject: [PATCH 8/9] Remove files

---
 .../unused_variables.compile.pass.cpp         | 83 -------------------
 .../containers/unused_variables.verify.cpp    | 69 ---------------
 .../strings/unused_variables.compile.pass.cpp | 30 -------
 .../strings/unused_variables.verify.cpp       | 24 ------
 .../libcxx/thread/unused_variables.verify.cpp | 64 --------------
 5 files changed, 270 deletions(-)
 delete mode 100644 libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp
 delete mode 100644 libcxx/test/libcxx/containers/unused_variables.verify.cpp
 delete mode 100644 libcxx/test/libcxx/strings/unused_variables.compile.pass.cpp
 delete mode 100644 libcxx/test/libcxx/strings/unused_variables.verify.cpp
 delete mode 100644 libcxx/test/libcxx/thread/unused_variables.verify.cpp

diff --git a/libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp b/libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp
deleted file mode 100644
index 52a1fb5a20902..0000000000000
--- a/libcxx/test/libcxx/containers/unused_variables.compile.pass.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Make sure that we don't introduce new warnings on unused variables of libc++ classes if
-// _LIBCPP_DISABLE_UNUSED_STRUCT_WARNINGS is set.
-
-// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_UNUSED_STRUCT_WARNINGS
-
-#include <deque>
-#include <forward_list>
-#include <list>
-#include <map>
-#include <set>
-#include <unordered_map>
-#include <unordered_set>
-#include <vector>
-
-#include "test_macros.h"
-
-void containers() {
-  std::deque<int> a;
-  std::forward_list<int> b;
-  std::list<int> c;
-  std::map<int, int> d;
-  std::multimap<int, int> e;
-  std::set<int> f;
-  std::multiset<int> g;
-  std::unordered_map<int, int> h;
-  std::unordered_multimap<int, int> i;
-  std::unordered_set<int> j;
-  std::unordered_multiset<int> k;
-  std::vector<int> m;
-  std::vector<bool> n;
-}
-
-void container_iterators() {
-  std::deque<int>::iterator a;
-#if TEST_STD_VER <= 23
-  std::forward_list<int>::iterator b;
-  std::list<int>::iterator c;
-  std::map<int, int>::iterator d;
-  std::multimap<int, int>::iterator e;
-  std::set<int>::iterator f;
-  std::multiset<int>::iterator g;
-#endif
-  std::unordered_map<int, int>::iterator h;
-  std::unordered_multimap<int, int>::iterator i;
-  std::unordered_set<int>::iterator j;
-  std::unordered_multiset<int>::iterator k;
-#if TEST_STD_VER <= 11
-  std::vector<int>::iterator m;
-#endif
-#if TEST_STD_VER <= 17
-  std::vector<bool>::iterator n;
-#endif
-}
-
-void container_const_iterators() {
-  std::deque<int>::const_iterator a;
-#if TEST_STD_VER <= 23
-  std::forward_list<int>::const_iterator b;
-  std::list<int>::const_iterator c;
-  std::map<int, int>::const_iterator d;
-  std::multimap<int, int>::const_iterator e;
-  std::set<int>::const_iterator f;
-  std::multiset<int>::const_iterator g;
-#endif
-  std::unordered_map<int, int>::const_iterator h;
-  std::unordered_multimap<int, int>::const_iterator i;
-  std::unordered_set<int>::const_iterator j;
-  std::unordered_multiset<int>::const_iterator k;
-#if TEST_STD_VER <= 11
-  std::vector<int>::const_iterator m;
-#endif
-#if TEST_STD_VER <= 17
-  std::vector<bool>::const_iterator n;
-#endif
-}
diff --git a/libcxx/test/libcxx/containers/unused_variables.verify.cpp b/libcxx/test/libcxx/containers/unused_variables.verify.cpp
deleted file mode 100644
index 67ab8a20724b6..0000000000000
--- a/libcxx/test/libcxx/containers/unused_variables.verify.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Make sure that we warn on unused variables of libc++ classes which behave like value types.
-// ADDITIONAL_COMPILE_FLAGS: -Wunused-variable
-
-#include <deque>
-#include <forward_list>
-#include <list>
-#include <map>
-#include <set>
-#include <unordered_map>
-#include <unordered_set>
-#include <vector>
-
-#include "test_macros.h"
-
-void containers() {
-  std::deque<int> a;                   // expected-warning {{unused variable}}
-  std::forward_list<int> b;            // expected-warning {{unused variable}}
-  std::list<int> c;                    // expected-warning {{unused variable}}
-  std::map<int, int> d;                // expected-warning {{unused variable}}
-  std::multimap<int, int> e;           // expected-warning {{unused variable}}
-  std::set<int> f;                     // expected-warning {{unused variable}}
-  std::multiset<int> g;                // expected-warning {{unused variable}}
-  std::unordered_map<int, int> h;      // expected-warning {{unused variable}}
-  std::unordered_multimap<int, int> i; // expected-warning {{unused variable}}
-  std::unordered_set<int> j;           // expected-warning {{unused variable}}
-  std::unordered_multiset<int> k;      // expected-warning {{unused variable}}
-  std::vector<int> m;                  // expected-warning {{unused variable}}
-  std::vector<bool> n;                 // expected-warning {{unused variable}}
-}
-
-void container_iterators() {
-  std::deque<int>::iterator a;                   // expected-warning {{unused variable}}
-  std::forward_list<int>::iterator b;            // expected-warning {{unused variable}}
-  std::list<int>::iterator c;                    // expected-warning {{unused variable}}
-  std::map<int, int>::iterator d;                // expected-warning {{unused variable}}
-  std::multimap<int, int>::iterator e;           // expected-warning {{unused variable}}
-  std::set<int>::iterator f;                     // expected-warning {{unused variable}}
-  std::multiset<int>::iterator g;                // expected-warning {{unused variable}}
-  std::unordered_map<int, int>::iterator h;      // expected-warning {{unused variable}}
-  std::unordered_multimap<int, int>::iterator i; // expected-warning {{unused variable}}
-  std::unordered_set<int>::iterator j;           // expected-warning {{unused variable}}
-  std::unordered_multiset<int>::iterator k;      // expected-warning {{unused variable}}
-  std::vector<int>::iterator m;                  // expected-warning {{unused variable}}
-  std::vector<bool>::iterator n;                 // expected-warning {{unused variable}}
-}
-
-void container_const_iterators() {
-  std::deque<int>::const_iterator a;                   // expected-warning {{unused variable}}
-  std::forward_list<int>::const_iterator b;            // expected-warning {{unused variable}}
-  std::list<int>::const_iterator c;                    // expected-warning {{unused variable}}
-  std::map<int, int>::const_iterator d;                // expected-warning {{unused variable}}
-  std::multimap<int, int>::const_iterator e;           // expected-warning {{unused variable}}
-  std::set<int>::const_iterator f;                     // expected-warning {{unused variable}}
-  std::multiset<int>::const_iterator g;                // expected-warning {{unused variable}}
-  std::unordered_map<int, int>::const_iterator h;      // expected-warning {{unused variable}}
-  std::unordered_multimap<int, int>::const_iterator i; // expected-warning {{unused variable}}
-  std::unordered_set<int>::const_iterator j;           // expected-warning {{unused variable}}
-  std::unordered_multiset<int>::const_iterator k;      // expected-warning {{unused variable}}
-  std::vector<int>::const_iterator m;                  // expected-warning {{unused variable}}
-  std::vector<bool>::const_iterator n;                 // expected-warning {{unused variable}}
-}
diff --git a/libcxx/test/libcxx/strings/unused_variables.compile.pass.cpp b/libcxx/test/libcxx/strings/unused_variables.compile.pass.cpp
deleted file mode 100644
index a9d520385271a..0000000000000
--- a/libcxx/test/libcxx/strings/unused_variables.compile.pass.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Make sure that we don't introduce new warnings on unused variables of libc++ classes if
-// _LIBCPP_DISABLE_UNUSED_STRUCT_WARNINGS is set.
-
-// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_UNUSED_STRUCT_WARNINGS
-
-#include <string>
-
-#include "test_macros.h"
-
-void strings() { std::string l; }
-
-void strings_iterators() {
-#if TEST_STD_VER <= 11
-  std::string::iterator l;
-#endif
-}
-
-void strings_const_iterators() {
-#if TEST_STD_VER <= 11
-  std::string::const_iterator l;
-#endif
-}
diff --git a/libcxx/test/libcxx/strings/unused_variables.verify.cpp b/libcxx/test/libcxx/strings/unused_variables.verify.cpp
deleted file mode 100644
index 04c372b000e78..0000000000000
--- a/libcxx/test/libcxx/strings/unused_variables.verify.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// Make sure that we warn on unused variables of libc++ classes which behave like value types.
-// ADDITIONAL_COMPILE_FLAGS: -Wunused-variable
-
-#include <string>
-
-void strings() {
-  std::string l; // expected-warning {{unused variable}}
-}
-
-void strings_iterators() {
-  std::string::iterator l; // expected-warning {{unused variable}}
-}
-
-void strings_const_iterators() {
-  std::string::const_iterator l; // expected-warning {{unused variable}}
-}
diff --git a/libcxx/test/libcxx/thread/unused_variables.verify.cpp b/libcxx/test/libcxx/thread/unused_variables.verify.cpp
deleted file mode 100644
index 33c4e74ac0a5a..0000000000000
--- a/libcxx/test/libcxx/thread/unused_variables.verify.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: no-threads
-
-// Make sure that we warn on unused variables of libc++ classes which behave like value types.
-// ADDITIONAL_COMPILE_FLAGS: -Wunused-variable
-
-#include <barrier>
-#include <condition_variable>
-#include <latch>
-#include <mutex>
-#include <semaphore>
-#include <shared_mutex>
-
-#include "test_macros.h"
-
-void synchronization(std::mutex& m) {
-  // <mutex>
-  std::mutex a;                      // expected-warning {{unused variable}}
-  std::once_flag b;                  // expected-warning {{unused variable}}
-  std::recursive_mutex c;            // expected-warning {{unused variable}}
-  std::recursive_timed_mutex d;      // expected-warning {{unused variable}}
-  std::timed_mutex e;                // expected-warning {{unused variable}}
-  std::unique_lock<std::mutex> f;    // This is https://llvm.org/PR222655
-  std::unique_lock<std::mutex> g(m); // Shouldn't be diagnosed
-#if TEST_STD_VER >= 17
-  std::unique_lock<std::mutex> h(m, std::defer_lock); // This is https://llvm.org/PR222655
-#endif
-
-  // <condition_variable>
-  std::condition_variable i;     // expected-warning {{unused variable}}
-  std::condition_variable_any j; // expected-warning {{unused variable}}
-
-#if TEST_STD_VER >= 20
-  // <semaphore>
-  std::counting_semaphore<> k(1); // expected-warning {{unused variable}}
-#endif
-
-  // <shared_mutex>
-#if TEST_STD_VER >= 17
-  std::shared_mutex l; // expected-warning {{unused variable}}
-#endif
-#if TEST_STD_VER >= 14
-  std::shared_timed_mutex n; // expected-warning {{unused variable}}
-  std::shared_timed_mutex n2;
-  std::shared_lock<std::shared_timed_mutex> o;                      // This is https://llvm.org/PR222655
-  std::shared_lock<std::shared_timed_mutex> p(n2);                  // Shouldn't be diagnosed
-  std::shared_lock<std::shared_timed_mutex> q(n2, std::defer_lock); // This is https://llvm.org/PR222655
-#endif
-
-#if TEST_STD_VER >= 20
-  // <barrier>
-  std::barrier<> r(1); // expected-warning {{unused variable}}
-
-  // <latch>
-  std::latch s(1); // expected-warning {{unused variable}}
-#endif
-}

>From 2f53f74381cff92ecc135eda8a4f7b6f56b8dc03 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Mon, 14 Sep 2026 15:28:21 +0300
Subject: [PATCH 9/9] Moved files

---
 .../libcxx/unused_variables.compile.pass.cpp  |  87 ++++++++++++
 .../test/libcxx/unused_variables.verify.cpp   | 124 ++++++++++++++++++
 2 files changed, 211 insertions(+)
 create mode 100644 libcxx/test/libcxx/unused_variables.compile.pass.cpp
 create mode 100644 libcxx/test/libcxx/unused_variables.verify.cpp

diff --git a/libcxx/test/libcxx/unused_variables.compile.pass.cpp b/libcxx/test/libcxx/unused_variables.compile.pass.cpp
new file mode 100644
index 0000000000000..cbcaf6a920e24
--- /dev/null
+++ b/libcxx/test/libcxx/unused_variables.compile.pass.cpp
@@ -0,0 +1,87 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Make sure that we don't introduce new warnings on unused variables of libc++ classes if
+// _LIBCPP_DISABLE_UNUSED_STRUCT_WARNINGS is set.
+
+// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_UNUSED_STRUCT_WARNINGS
+
+#include <deque>
+#include <forward_list>
+#include <list>
+#include <map>
+#include <set>
+#include <string>
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
+
+#include "test_macros.h"
+
+void containers() {
+  std::deque<int> a;
+  std::forward_list<int> b;
+  std::list<int> c;
+  std::map<int, int> d;
+  std::multimap<int, int> e;
+  std::set<int> f;
+  std::multiset<int> g;
+  std::unordered_map<int, int> h;
+  std::unordered_multimap<int, int> i;
+  std::unordered_set<int> j;
+  std::unordered_multiset<int> k;
+  std::string l;
+  std::vector<int> m;
+  std::vector<bool> n;
+}
+
+void container_iterators() {
+  std::deque<int>::iterator a;
+#if TEST_STD_VER <= 23
+  std::forward_list<int>::iterator b;
+  std::list<int>::iterator c;
+  std::map<int, int>::iterator d;
+  std::multimap<int, int>::iterator e;
+  std::set<int>::iterator f;
+  std::multiset<int>::iterator g;
+#endif
+  std::unordered_map<int, int>::iterator h;
+  std::unordered_multimap<int, int>::iterator i;
+  std::unordered_set<int>::iterator j;
+  std::unordered_multiset<int>::iterator k;
+#if TEST_STD_VER <= 11
+  std::string::iterator l;
+  std::vector<int>::iterator m;
+#endif
+#if TEST_STD_VER <= 17
+  std::vector<bool>::iterator n;
+#endif
+}
+
+void container_const_iterators() {
+  std::deque<int>::const_iterator a;
+#if TEST_STD_VER <= 23
+  std::forward_list<int>::const_iterator b;
+  std::list<int>::const_iterator c;
+  std::map<int, int>::const_iterator d;
+  std::multimap<int, int>::const_iterator e;
+  std::set<int>::const_iterator f;
+  std::multiset<int>::const_iterator g;
+#endif
+  std::unordered_map<int, int>::const_iterator h;
+  std::unordered_multimap<int, int>::const_iterator i;
+  std::unordered_set<int>::const_iterator j;
+  std::unordered_multiset<int>::const_iterator k;
+#if TEST_STD_VER <= 11
+  std::string::const_iterator l;
+  std::vector<int>::const_iterator m;
+#endif
+#if TEST_STD_VER <= 17
+  std::vector<bool>::const_iterator n;
+#endif
+}
diff --git a/libcxx/test/libcxx/unused_variables.verify.cpp b/libcxx/test/libcxx/unused_variables.verify.cpp
new file mode 100644
index 0000000000000..bfeb60d9bb6f0
--- /dev/null
+++ b/libcxx/test/libcxx/unused_variables.verify.cpp
@@ -0,0 +1,124 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Make sure that we warn on unused variables of libc++ classes which behave like value types.
+// ADDITIONAL_COMPILE_FLAGS: -Wunused-variable
+
+#include <barrier>
+#include <condition_variable>
+#include <deque>
+#include <forward_list>
+#include <latch>
+#include <list>
+#include <map>
+#include <mutex>
+#include <semaphore>
+#include <set>
+#include <shared_mutex>
+#include <string>
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
+
+#include "test_macros.h"
+
+void containers() {
+  std::deque<int> a;                   // expected-warning {{unused variable}}
+  std::forward_list<int> b;            // expected-warning {{unused variable}}
+  std::list<int> c;                    // expected-warning {{unused variable}}
+  std::map<int, int> d;                // expected-warning {{unused variable}}
+  std::multimap<int, int> e;           // expected-warning {{unused variable}}
+  std::set<int> f;                     // expected-warning {{unused variable}}
+  std::multiset<int> g;                // expected-warning {{unused variable}}
+  std::unordered_map<int, int> h;      // expected-warning {{unused variable}}
+  std::unordered_multimap<int, int> i; // expected-warning {{unused variable}}
+  std::unordered_set<int> j;           // expected-warning {{unused variable}}
+  std::unordered_multiset<int> k;      // expected-warning {{unused variable}}
+  std::string l;                       // expected-warning {{unused variable}}
+  std::vector<int> m;                  // expected-warning {{unused variable}}
+  std::vector<bool> n;                 // expected-warning {{unused variable}}
+}
+
+void container_iterators() {
+  std::deque<int>::iterator a;                   // expected-warning {{unused variable}}
+  std::forward_list<int>::iterator b;            // expected-warning {{unused variable}}
+  std::list<int>::iterator c;                    // expected-warning {{unused variable}}
+  std::map<int, int>::iterator d;                // expected-warning {{unused variable}}
+  std::multimap<int, int>::iterator e;           // expected-warning {{unused variable}}
+  std::set<int>::iterator f;                     // expected-warning {{unused variable}}
+  std::multiset<int>::iterator g;                // expected-warning {{unused variable}}
+  std::unordered_map<int, int>::iterator h;      // expected-warning {{unused variable}}
+  std::unordered_multimap<int, int>::iterator i; // expected-warning {{unused variable}}
+  std::unordered_set<int>::iterator j;           // expected-warning {{unused variable}}
+  std::unordered_multiset<int>::iterator k;      // expected-warning {{unused variable}}
+  std::string::iterator l;                       // expected-warning {{unused variable}}
+  std::vector<int>::iterator m;                  // expected-warning {{unused variable}}
+  std::vector<bool>::iterator n;                 // expected-warning {{unused variable}}
+}
+
+void container_const_iterators() {
+  std::deque<int>::const_iterator a;                   // expected-warning {{unused variable}}
+  std::forward_list<int>::const_iterator b;            // expected-warning {{unused variable}}
+  std::list<int>::const_iterator c;                    // expected-warning {{unused variable}}
+  std::map<int, int>::const_iterator d;                // expected-warning {{unused variable}}
+  std::multimap<int, int>::const_iterator e;           // expected-warning {{unused variable}}
+  std::set<int>::const_iterator f;                     // expected-warning {{unused variable}}
+  std::multiset<int>::const_iterator g;                // expected-warning {{unused variable}}
+  std::unordered_map<int, int>::const_iterator h;      // expected-warning {{unused variable}}
+  std::unordered_multimap<int, int>::const_iterator i; // expected-warning {{unused variable}}
+  std::unordered_set<int>::const_iterator j;           // expected-warning {{unused variable}}
+  std::unordered_multiset<int>::const_iterator k;      // expected-warning {{unused variable}}
+  std::string::const_iterator l;                       // expected-warning {{unused variable}}
+  std::vector<int>::const_iterator m;                  // expected-warning {{unused variable}}
+  std::vector<bool>::const_iterator n;                 // expected-warning {{unused variable}}
+}
+
+#ifndef TEST_HAS_NO_THREADS
+void synchronization(std::mutex& m) {
+  // <mutex>
+  std::mutex a;                      // expected-warning {{unused variable}}
+  std::once_flag b;                  // expected-warning {{unused variable}}
+  std::recursive_mutex c;            // expected-warning {{unused variable}}
+  std::recursive_timed_mutex d;      // expected-warning {{unused variable}}
+  std::timed_mutex e;                // expected-warning {{unused variable}}
+  std::unique_lock<std::mutex> f;    // This is https://llvm.org/PR222655
+  std::unique_lock<std::mutex> g(m); // Shouldn't be diagnosed
+#  if TEST_STD_VER >= 17
+  std::unique_lock<std::mutex> h(m, std::defer_lock); // This is https://llvm.org/PR222655
+#  endif
+
+  // <condition_variable>
+  std::condition_variable i;     // expected-warning {{unused variable}}
+  std::condition_variable_any j; // expected-warning {{unused variable}}
+
+#  if TEST_STD_VER >= 20
+  // <semaphore>
+  std::counting_semaphore<> k(1); // expected-warning {{unused variable}}
+#  endif
+
+  // <shared_mutex>
+#  if TEST_STD_VER >= 17
+  std::shared_mutex l; // expected-warning {{unused variable}}
+#  endif
+#  if TEST_STD_VER >= 14
+  std::shared_timed_mutex n; // expected-warning {{unused variable}}
+  std::shared_timed_mutex n2;
+  std::shared_lock<std::shared_timed_mutex> o;                      // This is https://llvm.org/PR222655
+  std::shared_lock<std::shared_timed_mutex> p(n2);                  // Shouldn't be diagnosed
+  std::shared_lock<std::shared_timed_mutex> q(n2, std::defer_lock); // This is https://llvm.org/PR222655
+#  endif
+
+#  if TEST_STD_VER >= 20
+  // <barrier>
+  std::barrier<> r(1); // expected-warning {{unused variable}}
+
+  // <latch>
+  std::latch s(1); // expected-warning {{unused variable}}
+#  endif
+}
+#endif // TEST_HAS_NO_THREADS



More information about the libcxx-commits mailing list