This can greatly reduce the amount of preprocessed code that is included
by other headers, because <stdexcept> depends on <string> which is huge.

        * include/std/array: Do not include <stdexcept>.
        * include/std/optional: Include <exception> and
        <bits/exception_defines.h> instead of <stdexcept>.

Preprocessed line counts for C++17 mode:

      <tuple> <memory> <map>
Before   25774    32453 31616
After     9925    23194 19062

Tested x86_64-linux, committed to trunk.

Once we have a gcc-10/porting_to.html page I'll note this change
there, because code relying on std::string and std::allocator being
defined by transitive includes will need to include the right headers.

commit 9eb6db53fb072e20b1d54b16d8c1c77638c934e5
Author: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Thu Jun 6 15:34:56 2019 +0000

    Avoid unnecessary inclusion of <stdexcept> header
    
    This can greatly reduce the amount of preprocessed code that is included
    by other headers, because <stdexcept> depends on <string> which is huge.
    
            * include/std/array: Do not include <stdexcept>.
            * include/std/optional: Include <exception> and
            <bits/exception_defines.h> instead of <stdexcept>.
            * testsuite/20_util/function_objects/searchers.cc: Include <cctype>
            for std::isalnum.
            * testsuite/20_util/tuple/cons/deduction.cc: Include <memory> for
            std::allocator.
            * testsuite/23_containers/map/erasure.cc: Include <string>.
            * testsuite/23_containers/unordered_map/erasure.cc: Likewise.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@272011 138bc75d-0d04-0410-961f-82ee72b054a4

diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array
index 02c6f4b4dbe..230e2b0f593 100644
--- a/libstdc++-v3/include/std/array
+++ b/libstdc++-v3/include/std/array
@@ -36,7 +36,7 @@
 #else
 
 #include <utility>
-#include <stdexcept>
+#include <bits/functexcept.h>
 #include <bits/stl_algobase.h>
 #include <bits/range_access.h>
 
diff --git a/libstdc++-v3/include/std/optional b/libstdc++-v3/include/std/optional
index ae825d3e327..79cd6c97019 100644
--- a/libstdc++-v3/include/std/optional
+++ b/libstdc++-v3/include/std/optional
@@ -35,10 +35,10 @@
 
 #include <utility>
 #include <type_traits>
-#include <stdexcept>
+#include <exception>
 #include <new>
 #include <initializer_list>
-#include <bits/functexcept.h>
+#include <bits/exception_defines.h>
 #include <bits/functional_hash.h>
 #include <bits/enable_special_members.h>
 
diff --git a/libstdc++-v3/testsuite/20_util/function_objects/searchers.cc b/libstdc++-v3/testsuite/20_util/function_objects/searchers.cc
index aae21d28d3a..fc278860f5c 100644
--- a/libstdc++-v3/testsuite/20_util/function_objects/searchers.cc
+++ b/libstdc++-v3/testsuite/20_util/function_objects/searchers.cc
@@ -19,6 +19,7 @@
 
 #include <functional>
 #include <cstring>
+#include <cctype>
 #ifdef _GLIBCXX_USE_WCHAR_T
 # include <cwchar>
 #endif
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc
index fa91f8fa539..eb3f2f3d6ab 100644
--- a/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc
@@ -19,6 +19,7 @@
 // <http://www.gnu.org/licenses/>.
 
 #include <tuple>
+#include <memory>
 
 template<typename T, typename U> struct require_same;
 template<typename T> struct require_same<T, T> { using type = void; };
diff --git a/libstdc++-v3/testsuite/23_containers/map/erasure.cc b/libstdc++-v3/testsuite/23_containers/map/erasure.cc
index d8a57160865..5b211c3602b 100644
--- a/libstdc++-v3/testsuite/23_containers/map/erasure.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/erasure.cc
@@ -19,6 +19,7 @@
 // <http://www.gnu.org/licenses/>.
 
 #include <map>
+#include <string>
 #include <testsuite_hooks.h>
 
 #ifndef __cpp_lib_erase_if
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc
index 35190a0d19e..17bb940f00f 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc
@@ -19,6 +19,7 @@
 // <http://www.gnu.org/licenses/>.
 
 #include <unordered_map>
+#include <string>
 #include <testsuite_hooks.h>
 
 #ifndef __cpp_lib_erase_if

Reply via email to