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.
commit 9462a83e712b1e8621ffee998ccd3291df889c4b
Author: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon Jun 17 08:18:17 2019 +0000
Fix tests that fail without PCH
The recent change to stop transitively including <string> broke some
tests, but only when the library is configured without PCH, because
otherwise the <string> header still gets included via the precompiled
<bits/stdc++.h> header.
* testsuite/20_util/bad_function_call/what.cc: Include <string> header
for std::string.
* testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc: Likewise.
* testsuite/20_util/tuple/cons/allocator_with_any.cc: Include <memory>
header for std::allocator.
* testsuite/23_containers/array/tuple_interface/tuple_element.cc: Add
using-declaration for std::size_t.
* testsuite/23_containers/array/tuple_interface/tuple_size.cc:
Likewise.
* testsuite/23_containers/deque/cons/55977.cc: Include <istream> for
std::istream.
* testsuite/23_containers/vector/cons/55977.cc: Likewise.
* testsuite/experimental/map/erasure.cc: Include <string> for
std::string.
* testsuite/experimental/unordered_map/erasure.cc: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@272376 138bc75d-0d04-0410-961f-82ee72b054a4
diff --git a/libstdc++-v3/testsuite/20_util/bad_function_call/what.cc b/libstdc++-v3/testsuite/20_util/bad_function_call/what.cc
index e17b42feedd..229c7ef1cab 100644
--- a/libstdc++-v3/testsuite/20_util/bad_function_call/what.cc
+++ b/libstdc++-v3/testsuite/20_util/bad_function_call/what.cc
@@ -18,6 +18,7 @@
// <http://www.gnu.org/licenses/>.
#include <functional>
+#include <string>
#include <testsuite_hooks.h>
int main()
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc
index f9c44cd60f3..a32a5c91943 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc
@@ -20,6 +20,7 @@
// 20.6.6.2 Template class shared_ptr [util.smartptr.shared]
#include <memory>
+#include <string>
#include <testsuite_hooks.h>
struct A { };
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc
index 655b5328bda..154ec9161bd 100644
--- a/libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/allocator_with_any.cc
@@ -23,6 +23,7 @@
// this test may begin to fail.
#include <tuple>
+#include <memory>
#include <experimental/any>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
index b6fda44a3c5..e8b6bc12e77 100644
--- a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element.cc
@@ -29,7 +29,7 @@ test01()
// This relies on the fact that <utility> includes <type_traits>:
using std::is_same;
- const size_t len = 3;
+ const std::size_t len = 3;
typedef array<int, len> array_type;
static_assert(is_same<tuple_element<0, array_type>::type, int>::value, "" );
diff --git a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_size.cc b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_size.cc
index aedd5fc2a2d..740c42a8914 100644
--- a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_size.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_size.cc
@@ -26,6 +26,7 @@ test01()
{
using std::array;
using std::tuple_size;
+ using std::size_t;
// This relies on the fact that <utility> includes <type_traits>:
using std::is_same;
diff --git a/libstdc++-v3/testsuite/23_containers/deque/cons/55977.cc b/libstdc++-v3/testsuite/23_containers/deque/cons/55977.cc
index 492aedf97b4..5ab516a2950 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/cons/55977.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/cons/55977.cc
@@ -21,6 +21,7 @@
#include <utility>
#include <deque>
#include <iterator>
+#include <istream>
template <class T>
struct MyAllocator
diff --git a/libstdc++-v3/testsuite/23_containers/vector/cons/55977.cc b/libstdc++-v3/testsuite/23_containers/vector/cons/55977.cc
index f7767923592..efa03b1edfd 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/cons/55977.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/cons/55977.cc
@@ -21,6 +21,7 @@
#include <utility>
#include <vector>
#include <iterator>
+#include <istream>
template <class T>
struct MyAllocator
diff --git a/libstdc++-v3/testsuite/experimental/map/erasure.cc b/libstdc++-v3/testsuite/experimental/map/erasure.cc
index c636fcbb1b5..aa3d42da299 100644
--- a/libstdc++-v3/testsuite/experimental/map/erasure.cc
+++ b/libstdc++-v3/testsuite/experimental/map/erasure.cc
@@ -18,6 +18,7 @@
// <http://www.gnu.org/licenses/>.
#include <experimental/map>
+#include <string>
#include <testsuite_hooks.h>
auto is_odd_pair = [](const std::pair<const int, std::string>& p)
diff --git a/libstdc++-v3/testsuite/experimental/unordered_map/erasure.cc b/libstdc++-v3/testsuite/experimental/unordered_map/erasure.cc
index c08fa315271..79a42ffbdf9 100644
--- a/libstdc++-v3/testsuite/experimental/unordered_map/erasure.cc
+++ b/libstdc++-v3/testsuite/experimental/unordered_map/erasure.cc
@@ -18,6 +18,7 @@
// <http://www.gnu.org/licenses/>.
#include <experimental/unordered_map>
+#include <string>
#include <testsuite_hooks.h>
auto is_odd_pair = [](const std::pair<const int, std::string>& p)