diff mbox series

Avoid unnecessary inclusion of <stdexcept> header

Message ID 20190606153836.GT2599@redhat.com
State New
Headers show
Series Avoid unnecessary inclusion of <stdexcept> header | expand

Commit Message

Jonathan Wakely June 6, 2019, 3:38 p.m. UTC
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.

Comments

Jonathan Wakely June 17, 2019, 8:20 a.m. UTC | #1
On 06/06/19 16:38 +0100, Jonathan Wakely wrote:
>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.

After this change some tests fail without PCH, because they weren't
including what they use.

Tested x86_64-linux, committed to trunk.
diff mbox series

Patch

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