[libcxx-commits] [libcxx] [libc++] Move libcxx/test/libcxx/extensions to libcxx/test/extensions and update the tests (PR #145476)
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Jun 25 00:43:31 PDT 2025
https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/145476
>From decd20e6937134660c9c23c5fee25f4c23ad8b86 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Tue, 24 Jun 2025 10:03:23 +0200
Subject: [PATCH] [libc++] Move libcxx/test/libcxx/extensions to
libcxx/test/extensions and update the tests
This patch adds a separate `extensions` directory, since there are
quite a few extensions in libc++ that aren't necessarily
libc++-specific. For example, the tests currently in
`libcxx/test/libcxx/extensions` should also pass with libstdc++, since
they originally added the extension. This also "documents" what users
are allowed to rely on and what parts are just libc++ tests to make sure
our implementation is behaving as we expect, which may be subject to
change.
---
.../gnu/hash/specializations.pass.cpp | 31 ++++++++++++++++
.../gnu/hash/specializations.verify.cpp} | 7 ++--
.../hash_map/const_iterator.compile.fail.cpp | 0
.../extensions/hash/specializations.pass.cpp | 36 -------------------
4 files changed, 35 insertions(+), 39 deletions(-)
create mode 100644 libcxx/test/extensions/gnu/hash/specializations.pass.cpp
rename libcxx/test/{libcxx/extensions/hash/specializations.compile.fail.cpp => extensions/gnu/hash/specializations.verify.cpp} (70%)
rename libcxx/test/{libcxx/extensions => extensions/gnu}/hash_map/const_iterator.compile.fail.cpp (100%)
delete mode 100644 libcxx/test/libcxx/extensions/hash/specializations.pass.cpp
diff --git a/libcxx/test/extensions/gnu/hash/specializations.pass.cpp b/libcxx/test/extensions/gnu/hash/specializations.pass.cpp
new file mode 100644
index 0000000000000..6661ed0da7dad
--- /dev/null
+++ b/libcxx/test/extensions/gnu/hash/specializations.pass.cpp
@@ -0,0 +1,31 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+// Prevent <ext/hash_set> from generating deprecated warnings for this test.
+// ADDITIONAL_COMPILE_FLAGS: -Wno-deprecated
+
+#include <cassert>
+#include <ext/hash_map>
+#include <string>
+
+int main(int, char**) {
+ char str[] = "test";
+ assert(__gnu_cxx::hash<const char*>()("test") == std::hash<std::string>()("test"));
+ assert(__gnu_cxx::hash<char*>()(str) == std::hash<std::string>()("test"));
+ assert(__gnu_cxx::hash<char>()(42) == 42);
+ assert(__gnu_cxx::hash<signed char>()(42) == 42);
+ assert(__gnu_cxx::hash<unsigned char>()(42) == 42);
+ assert(__gnu_cxx::hash<short>()(42) == 42);
+ assert(__gnu_cxx::hash<unsigned short>()(42) == 42);
+ assert(__gnu_cxx::hash<int>()(42) == 42);
+ assert(__gnu_cxx::hash<unsigned int>()(42) == 42);
+ assert(__gnu_cxx::hash<long>()(42) == 42);
+ assert(__gnu_cxx::hash<unsigned long>()(42) == 42);
+
+ return 0;
+}
diff --git a/libcxx/test/libcxx/extensions/hash/specializations.compile.fail.cpp b/libcxx/test/extensions/gnu/hash/specializations.verify.cpp
similarity index 70%
rename from libcxx/test/libcxx/extensions/hash/specializations.compile.fail.cpp
rename to libcxx/test/extensions/gnu/hash/specializations.verify.cpp
index f81ec5dacb91e..5a74a52dd3956 100644
--- a/libcxx/test/libcxx/extensions/hash/specializations.compile.fail.cpp
+++ b/libcxx/test/extensions/gnu/hash/specializations.verify.cpp
@@ -6,13 +6,14 @@
//
//===----------------------------------------------------------------------===//
+// ADDITIONAL_COMPILE_FLAGS: -Wno-deprecated
+
#include <assert.h>
#include <ext/hash_map>
#include <string>
-int main(int, char**)
-{
- assert(__gnu_cxx::hash<std::string>()(std::string()) == 0); // error
+int main(int, char**) {
+ assert(__gnu_cxx::hash<std::string>()(std::string()) == 0); // expected-error {{does not provide a call operator}}
return 0;
}
diff --git a/libcxx/test/libcxx/extensions/hash_map/const_iterator.compile.fail.cpp b/libcxx/test/extensions/gnu/hash_map/const_iterator.compile.fail.cpp
similarity index 100%
rename from libcxx/test/libcxx/extensions/hash_map/const_iterator.compile.fail.cpp
rename to libcxx/test/extensions/gnu/hash_map/const_iterator.compile.fail.cpp
diff --git a/libcxx/test/libcxx/extensions/hash/specializations.pass.cpp b/libcxx/test/libcxx/extensions/hash/specializations.pass.cpp
deleted file mode 100644
index 345a2721dc035..0000000000000
--- a/libcxx/test/libcxx/extensions/hash/specializations.pass.cpp
+++ /dev/null
@@ -1,36 +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: clang-modules-build
-
-// Prevent <ext/hash_set> from generating deprecated warnings for this test.
-// ADDITIONAL_COMPILE_FLAGS: -Wno-deprecated
-#include <assert.h>
-#include <ext/hash_map>
-#include <string>
-
-#include "test_macros.h"
-
-int main(int, char**)
-{
- char str[] = "test";
- assert(__gnu_cxx::hash<const char *>()("test") ==
- std::hash<std::string>()("test"));
- assert(__gnu_cxx::hash<char *>()(str) == std::hash<std::string>()("test"));
- assert(__gnu_cxx::hash<char>()(42) == 42);
- assert(__gnu_cxx::hash<signed char>()(42) == 42);
- assert(__gnu_cxx::hash<unsigned char>()(42) == 42);
- assert(__gnu_cxx::hash<short>()(42) == 42);
- assert(__gnu_cxx::hash<unsigned short>()(42) == 42);
- assert(__gnu_cxx::hash<int>()(42) == 42);
- assert(__gnu_cxx::hash<unsigned int>()(42) == 42);
- assert(__gnu_cxx::hash<long>()(42) == 42);
- assert(__gnu_cxx::hash<unsigned long>()(42) == 42);
-
- return 0;
-}
More information about the libcxx-commits
mailing list