Prepare libstdc++ for the std::hazard_pointer implementation (P2530R3,
C++26 [32.11.3]):
* <hazard_pointer> top-level header with the conventional
feature-test gate around the internal include.
* bits/hazard_ptr.h empty stub so the symlink farm picks it up
before the implementation commit lands.
* version.def entry for __cpp_lib_hazard_pointer == 202306L gated
on gthread = yes and hosted = yes -- hazard_pointer is a hosted
concurrency facility and must not advertise the feature-test
macro on no-thread or freestanding builds, matching the pattern
used by jthread, barrier, and latch.
* Register bits/hazard_ptr.h in include/Makefile.am so the build
creates a symlink under build/include/bits/.
* Smoke tests verifying __cpp_lib_hazard_pointer is exposed at
202306L through both <hazard_pointer> (1.cc) and <version>
(version.cc), matching the jthread/expected convention.
No behavior change; the public class definitions arrive in the next
commit.
libstdc++-v3/ChangeLog:
* include/Makefile.am: Add hazard_ptr.h.
* include/Makefile.in: Regenerate.
* include/bits/version.def: New entry, gated on gthread and hosted.
* include/bits/version.h: Regenerate.
* include/bits/hazard_ptr.h: New file (stub).
* include/std/hazard_pointer: New file.
* testsuite/30_threads/hazard_pointer/1.cc: New test.
* testsuite/30_threads/hazard_pointer/version.cc: New test.
---
libstdc++-v3/include/Makefile.am | 2 +
libstdc++-v3/include/Makefile.in | 2 +
libstdc++-v3/include/bits/hazard_ptr.h | 33 ++++++++++++++
libstdc++-v3/include/bits/version.def | 10 +++++
libstdc++-v3/include/bits/version.h | 10 +++++
libstdc++-v3/include/std/hazard_pointer | 44 +++++++++++++++++++
.../testsuite/30_threads/hazard_pointer/1.cc | 28 ++++++++++++
.../30_threads/hazard_pointer/version.cc | 29 ++++++++++++
8 files changed, 158 insertions(+)
create mode 100644 libstdc++-v3/include/bits/hazard_ptr.h
create mode 100644 libstdc++-v3/include/std/hazard_pointer
create mode 100644 libstdc++-v3/testsuite/30_threads/hazard_pointer/1.cc
create mode 100644 libstdc++-v3/testsuite/30_threads/hazard_pointer/version.cc
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index ec932181a96..de1d2ba1d36 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -79,6 +79,7 @@ std_headers = \
${std_srcdir}/forward_list \
${std_srcdir}/fstream \
${std_srcdir}/future \
+ ${std_srcdir}/hazard_pointer \
${std_srcdir}/inplace_vector \
${std_srcdir}/iomanip \
${std_srcdir}/ios \
@@ -224,6 +225,7 @@ bits_headers = \
${bits_srcdir}/gslice_array.h \
${bits_srcdir}/hashtable.h \
${bits_srcdir}/hashtable_policy.h \
+ ${bits_srcdir}/hazard_ptr.h \
${bits_srcdir}/indirect.h \
${bits_srcdir}/indirect_array.h \
${bits_srcdir}/ios_base.h \
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 00ae5209f60..e4cc73f41ac 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -438,6 +438,7 @@ std_freestanding = \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/forward_list \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/fstream \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/future \
+@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/hazard_pointer \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/inplace_vector \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/iomanip \
@GLIBCXX_HOSTED_TRUE@ ${std_srcdir}/ios \
@@ -580,6 +581,7 @@ bits_freestanding = \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/gslice_array.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/hashtable.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/hashtable_policy.h \
+@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/hazard_ptr.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/indirect.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/indirect_array.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/ios_base.h \
diff --git a/libstdc++-v3/include/bits/hazard_ptr.h
b/libstdc++-v3/include/bits/hazard_ptr.h
new file mode 100644
index 00000000000..3ffccfd2d19
--- /dev/null
+++ b/libstdc++-v3/include/bits/hazard_ptr.h
@@ -0,0 +1,33 @@
+// Implementation of std::hazard_pointer -*- C++ -*-
+
+// Copyright (C) 2026 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/hazard_ptr.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{hazard_pointer}
+ */
+
+#ifndef _GLIBCXX_HAZARD_PTR_H
+#define _GLIBCXX_HAZARD_PTR_H 1
+
+#endif // _GLIBCXX_HAZARD_PTR_H
diff --git a/libstdc++-v3/include/bits/version.def
b/libstdc++-v3/include/bits/version.def
index 1f0d3a2670e..a8c2a559f9d 100644
--- a/libstdc++-v3/include/bits/version.def
+++ b/libstdc++-v3/include/bits/version.def
@@ -2410,6 +2410,16 @@ ftms = {
};
};
+ftms = {
+ name = hazard_pointer;
+ values = {
+ v = 202306;
+ cxxmin = 26;
+ gthread = yes;
+ hosted = yes;
+ };
+};
+
// Standard test specifications.
stds[97] = ">= 199711L";
stds[03] = ">= 199711L";
diff --git a/libstdc++-v3/include/bits/version.h
b/libstdc++-v3/include/bits/version.h
index 66ac0ebef68..169b5aab0d4 100644
--- a/libstdc++-v3/include/bits/version.h
+++ b/libstdc++-v3/include/bits/version.h
@@ -2675,4 +2675,14 @@
#endif /* !defined(__cpp_lib_is_structural) */
#undef __glibcxx_want_is_structural
+#if !defined(__cpp_lib_hazard_pointer)
+# if (__cplusplus > 202302L)
+# define __glibcxx_hazard_pointer 202306L
+# if defined(__glibcxx_want_all) || defined(__glibcxx_want_hazard_pointer)
+# define __cpp_lib_hazard_pointer 202306L
+# endif
+# endif
+#endif /* !defined(__cpp_lib_hazard_pointer) */
+#undef __glibcxx_want_hazard_pointer
+
#undef __glibcxx_want_all
diff --git a/libstdc++-v3/include/std/hazard_pointer
b/libstdc++-v3/include/std/hazard_pointer
new file mode 100644
index 00000000000..c231f69ff34
--- /dev/null
+++ b/libstdc++-v3/include/std/hazard_pointer
@@ -0,0 +1,44 @@
+// <hazard_pointer> -*- C++ -*-
+
+// Copyright (C) 2026 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file include/hazard_pointer
+ * This is a Standard C++ Library header.
+ */
+
+#ifndef _GLIBCXX_HAZARD_POINTER
+#define _GLIBCXX_HAZARD_POINTER 1
+
+#ifdef _GLIBCXX_SYSHDR
+#pragma GCC system_header
+#endif
+
+#include <bits/requires_hosted.h> // concurrency
+
+#define __glibcxx_want_hazard_pointer
+#include <bits/version.h>
+
+#ifdef __cpp_lib_hazard_pointer // C++ >= 26 && hosted
+#include <bits/hazard_ptr.h>
+#endif // __cpp_lib_hazard_pointer
+#endif // _GLIBCXX_HAZARD_POINTER
diff --git a/libstdc++-v3/testsuite/30_threads/hazard_pointer/1.cc
b/libstdc++-v3/testsuite/30_threads/hazard_pointer/1.cc
new file mode 100644
index 00000000000..0d425b90450
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/hazard_pointer/1.cc
@@ -0,0 +1,28 @@
+// Copyright (C) 2026 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do compile { target c++26 } }
+// { dg-require-effective-target hosted }
+// { dg-add-options no_pch }
+
+#include <hazard_pointer>
+
+#ifndef __cpp_lib_hazard_pointer
+# error "Feature-test macro for hazard_pointer missing in <hazard_pointer>"
+#elif __cpp_lib_hazard_pointer != 202306L
+# error "Feature-test macro for hazard_pointer has wrong value in
<hazard_pointer>"
+#endif
\ No newline at end of file
diff --git a/libstdc++-v3/testsuite/30_threads/hazard_pointer/version.cc
b/libstdc++-v3/testsuite/30_threads/hazard_pointer/version.cc
new file mode 100644
index 00000000000..8ac0fde320f
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/hazard_pointer/version.cc
@@ -0,0 +1,29 @@
+// Copyright (C) 2026 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do compile { target c++26 } }
+// { dg-require-gthreads "" }
+// { dg-require-effective-target hosted }
+// { dg-add-options no_pch }
+
+#include <version>
+
+#ifndef __cpp_lib_hazard_pointer
+# error "Feature-test macro for hazard_pointer missing in <version>"
+#elif __cpp_lib_hazard_pointer != 202306L
+# error "Feature-test macro for hazard_pointer has wrong value in <version>"
+#endif
--
2.54.0