public inbox for libstdc++-cvs@sourceware.org
help / color / mirror / Atom feed
From: Jonathan Wakely <redi@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org
Subject: [gcc r11-7604] libstdc++: Fix headers that can't be used as header units [PR 99413]
Date: Wed, 10 Mar 2021 15:28:33 +0000 (GMT)	[thread overview]
Message-ID: <20210310152833.0FB783973010@sourceware.org> (raw)

https://gcc.gnu.org/g:47cca0288d06bd851e5801d13bbee7d9374b685d

commit r11-7604-g47cca0288d06bd851e5801d13bbee7d9374b685d
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Wed Mar 10 15:27:41 2021 +0000

    libstdc++: Fix headers that can't be used as header units [PR 99413]
    
    This adds missing includes to internal library headers which get
    included from more than one other header, so that they can be compiled
    as a stand-alone header unit.
    
    For existing use cases these includes are no-ops because they're already
    done by the header that includes these files. For compiling them as a
    header unit, this ensures that they include what they use.
    
    libstdc++-v3/ChangeLog:
    
            PR libstdc++/99413
            * include/bits/align.h: Include debug/assertions.h.
            * include/bits/codecvt.h: Include bits/c++config.h.
            * include/bits/enable_special_members.h: Likewise.
            * include/bits/erase_if.h: Likewise.
            * include/bits/functional_hash.h: Include <type_traits>.
            * include/bits/invoke.h: Include bits/move.h.
            * include/bits/ostream_insert.h: Include bits/exception_defines.h.
            * include/bits/parse_numbers.h: Include <type_traits>.
            * include/bits/predefined_ops.h: Include bits/c++config.h.
            * include/bits/range_access.h: Include bits/stl_iterator.h.
            * include/bits/stl_bvector.h: Do not include bits/stl_vector.h.
            * include/bits/stl_iterator.h: Include bits/stl_iterator_base_types.h.
            * include/bits/stl_uninitialized.h: Include bits/stl_algobase.h.
            * include/bits/uniform_int_dist.h: Include bits/concept_check.h.
            * include/bits/unique_lock.h: Include bits/std_mutex.h.
            * include/debug/assertions.h: Include bits/c++config.h.

Diff:
---
 libstdc++-v3/include/bits/align.h                  |  1 +
 libstdc++-v3/include/bits/codecvt.h                |  3 +++
 libstdc++-v3/include/bits/enable_special_members.h |  2 ++
 libstdc++-v3/include/bits/erase_if.h               |  2 ++
 libstdc++-v3/include/bits/functional_hash.h        |  1 +
 libstdc++-v3/include/bits/invoke.h                 |  1 +
 libstdc++-v3/include/bits/ostream_insert.h         |  1 +
 libstdc++-v3/include/bits/parse_numbers.h          |  1 +
 libstdc++-v3/include/bits/predefined_ops.h         |  2 ++
 libstdc++-v3/include/bits/range_access.h           |  1 +
 libstdc++-v3/include/bits/stl_bvector.h            | 12 ------------
 libstdc++-v3/include/bits/stl_iterator.h           |  1 +
 libstdc++-v3/include/bits/stl_uninitialized.h      | 11 ++++++-----
 libstdc++-v3/include/bits/uniform_int_dist.h       |  1 +
 libstdc++-v3/include/bits/unique_lock.h            |  1 +
 libstdc++-v3/include/debug/assertions.h            |  2 ++
 16 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/libstdc++-v3/include/bits/align.h b/libstdc++-v3/include/bits/align.h
index a81cc3e7a7b..eabdaa6163d 100644
--- a/libstdc++-v3/include/bits/align.h
+++ b/libstdc++-v3/include/bits/align.h
@@ -34,6 +34,7 @@
 
 #include <bit>          // std::has_single_bit
 #include <stdint.h>     // uintptr_t
+#include <debug/assertions.h> // _GLIBCXX_DEBUG_ASSERT
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
diff --git a/libstdc++-v3/include/bits/codecvt.h b/libstdc++-v3/include/bits/codecvt.h
index af841edf947..85f92b14650 100644
--- a/libstdc++-v3/include/bits/codecvt.h
+++ b/libstdc++-v3/include/bits/codecvt.h
@@ -38,6 +38,9 @@
 
 #pragma GCC system_header
 
+#include <bits/c++config.h>
+#include <bits/locale_classes.h> // locale::facet
+
 namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/bits/enable_special_members.h b/libstdc++-v3/include/bits/enable_special_members.h
index b772b7e4c28..8361a063b4d 100644
--- a/libstdc++-v3/include/bits/enable_special_members.h
+++ b/libstdc++-v3/include/bits/enable_special_members.h
@@ -32,6 +32,8 @@
 
 #pragma GCC system_header
 
+#include <bits/c++config.h>
+
 namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/bits/erase_if.h b/libstdc++-v3/include/bits/erase_if.h
index 796382cc74c..8d1d23168fa 100644
--- a/libstdc++-v3/include/bits/erase_if.h
+++ b/libstdc++-v3/include/bits/erase_if.h
@@ -34,6 +34,8 @@
 
 #if __cplusplus >= 201402L
 
+#include <bits/c++config.h>
+
 namespace std
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/bits/functional_hash.h b/libstdc++-v3/include/bits/functional_hash.h
index 2024af1e585..ac1d7e2979e 100644
--- a/libstdc++-v3/include/bits/functional_hash.h
+++ b/libstdc++-v3/include/bits/functional_hash.h
@@ -32,6 +32,7 @@
 
 #pragma GCC system_header
 
+#include <type_traits>
 #include <bits/hash_bytes.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
diff --git a/libstdc++-v3/include/bits/invoke.h b/libstdc++-v3/include/bits/invoke.h
index d8969ea49ba..3ffcabbaebe 100644
--- a/libstdc++-v3/include/bits/invoke.h
+++ b/libstdc++-v3/include/bits/invoke.h
@@ -37,6 +37,7 @@
 #else
 
 #include <type_traits>
+#include <bits/move.h> // forward
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
diff --git a/libstdc++-v3/include/bits/ostream_insert.h b/libstdc++-v3/include/bits/ostream_insert.h
index e5b03f8f93a..72eea8b1d05 100644
--- a/libstdc++-v3/include/bits/ostream_insert.h
+++ b/libstdc++-v3/include/bits/ostream_insert.h
@@ -34,6 +34,7 @@
 
 #include <iosfwd>
 #include <bits/cxxabi_forced.h>
+#include <bits/exception_defines.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
diff --git a/libstdc++-v3/include/bits/parse_numbers.h b/libstdc++-v3/include/bits/parse_numbers.h
index ada91567afe..56186612f0f 100644
--- a/libstdc++-v3/include/bits/parse_numbers.h
+++ b/libstdc++-v3/include/bits/parse_numbers.h
@@ -36,6 +36,7 @@
 
 #if __cplusplus >= 201402L
 
+#include <type_traits>
 #include <ext/numeric_traits.h>
 
 namespace std _GLIBCXX_VISIBILITY(default)
diff --git a/libstdc++-v3/include/bits/predefined_ops.h b/libstdc++-v3/include/bits/predefined_ops.h
index b8814588b1c..97a8a6c3dac 100644
--- a/libstdc++-v3/include/bits/predefined_ops.h
+++ b/libstdc++-v3/include/bits/predefined_ops.h
@@ -30,6 +30,8 @@
 #ifndef _GLIBCXX_PREDEFINED_OPS_H
 #define _GLIBCXX_PREDEFINED_OPS_H	1
 
+#include <bits/move.h>
+
 namespace __gnu_cxx
 {
 namespace __ops
diff --git a/libstdc++-v3/include/bits/range_access.h b/libstdc++-v3/include/bits/range_access.h
index bfb3449a7ee..ab26b64e44c 100644
--- a/libstdc++-v3/include/bits/range_access.h
+++ b/libstdc++-v3/include/bits/range_access.h
@@ -35,6 +35,7 @@
 #if __cplusplus >= 201103L
 #include <initializer_list>
 #include <type_traits>	    // common_type_t, make_signed_t
+#include <bits/stl_iterator.h> // reverse_iterator
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h
index 1e3d71f3a6f..fadb6615102 100644
--- a/libstdc++-v3/include/bits/stl_bvector.h
+++ b/libstdc++-v3/include/bits/stl_bvector.h
@@ -573,18 +573,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       { return (__n + int(_S_word_bit) - 1) / int(_S_word_bit); }
     };
 
-_GLIBCXX_END_NAMESPACE_CONTAINER
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace std
-
-// Declare a partial specialization of vector<T, Alloc>.
-#include <bits/stl_vector.h>
-
-namespace std _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
-
   /**
    *  @brief  A specialization of vector for booleans which offers fixed time
    *  access to individual elements in any order.
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index 385d3256742..ac8a7c4b1a8 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -61,6 +61,7 @@
 #define _STL_ITERATOR_H 1
 
 #include <bits/cpp_type_traits.h>
+#include <bits/stl_iterator_base_types.h>
 #include <ext/type_traits.h>
 #include <bits/move.h>
 #include <bits/ptr_traits.h>
diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h b/libstdc++-v3/include/bits/stl_uninitialized.h
index d28dafafaae..ace83000b20 100644
--- a/libstdc++-v3/include/bits/stl_uninitialized.h
+++ b/libstdc++-v3/include/bits/stl_uninitialized.h
@@ -56,15 +56,16 @@
 #ifndef _STL_UNINITIALIZED_H
 #define _STL_UNINITIALIZED_H 1
 
-#if __cplusplus > 201402L
-#include <bits/stl_pair.h>
-#endif
-
 #if __cplusplus >= 201103L
 #include <type_traits>
 #endif
 
-#include <ext/alloc_traits.h>
+#include <bits/stl_algobase.h>    // copy
+#include <ext/alloc_traits.h>     // __alloc_traits
+
+#if __cplusplus >= 201703L
+#include <bits/stl_pair.h>
+#endif
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
diff --git a/libstdc++-v3/include/bits/uniform_int_dist.h b/libstdc++-v3/include/bits/uniform_int_dist.h
index 3ab5c9a669f..2d83524caf6 100644
--- a/libstdc++-v3/include/bits/uniform_int_dist.h
+++ b/libstdc++-v3/include/bits/uniform_int_dist.h
@@ -36,6 +36,7 @@
 #if __cplusplus > 201703L
 # include <concepts>
 #endif
+#include <bits/concept_check.h> // __glibcxx_function_requires
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
diff --git a/libstdc++-v3/include/bits/unique_lock.h b/libstdc++-v3/include/bits/unique_lock.h
index 03f1d3b505a..07edfbbccb1 100644
--- a/libstdc++-v3/include/bits/unique_lock.h
+++ b/libstdc++-v3/include/bits/unique_lock.h
@@ -38,6 +38,7 @@
 
 #include <chrono>
 #include <bits/move.h> // for std::swap
+#include <bits/std_mutex.h> // for std::defer_lock_t
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
diff --git a/libstdc++-v3/include/debug/assertions.h b/libstdc++-v3/include/debug/assertions.h
index da5fb278dc0..e34061e6baf 100644
--- a/libstdc++-v3/include/debug/assertions.h
+++ b/libstdc++-v3/include/debug/assertions.h
@@ -29,6 +29,8 @@
 #ifndef _GLIBCXX_DEBUG_ASSERTIONS_H
 #define _GLIBCXX_DEBUG_ASSERTIONS_H 1
 
+#include <bits/c++config.h>
+
 #ifndef _GLIBCXX_DEBUG
 
 # define _GLIBCXX_DEBUG_ASSERT(_Condition)


                 reply	other threads:[~2021-03-10 15:28 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210310152833.0FB783973010@sourceware.org \
    --to=redi@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    --cc=libstdc++-cvs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).