[PATCH] modules : Make sure we include <map> in system.h.

Iain Sandoe iain@sandoe.co.uk
Wed Mar 31 20:50:16 GMT 2021


Hi,

This fixes a stage 1 bootstrap fail on some Darwin versions when the
bootstrap compiler is clang / libc++ from Xcode.

bootstrapped on x86_64-darwin16, x86_64-linux-gnu
OK for master?
thanks
Iain

----


It appears that many targets include the map header transitively in
other std headers included from system.h.  However there are some
editions of clang/libc++ in Xcode that do not, which results in a
bootstrap fail - since when resolver.h is included  there is then a
conflict in declaring abort().

The fix is to ensure that map is pulled in by system.h and before
resolver.h is included.  As a precautionary measure and to alert
anyone perhaps adding another header to resolver.h this patch also
gates the direct includes there on !IN_GCC.

c++tools/ChangeLog:

	* resolver.h: Do not include std headers directly when
	building in GCC.

gcc/cp/ChangeLog:

	* mapper-client.cc (INCLUDE_MAP): New; require map to be
	included from system.h.
	* mapper-resolver.cc (INCLUDE_MAP): Likewise.
---
  c++tools/resolver.h       | 2 ++
  gcc/cp/mapper-client.cc   | 1 +
  gcc/cp/mapper-resolver.cc | 1 +
  3 files changed, 4 insertions(+)

diff --git a/c++tools/resolver.h b/c++tools/resolver.h
index 19339125b26..a9547bf6994 100644
--- a/c++tools/resolver.h
+++ b/c++tools/resolver.h
@@ -24,8 +24,10 @@ along with GCC; see the file COPYING3.  If not see
  // Mapper interface for client and server bits
  #include "cody.hh"
  // C++
+#if !IN_GCC
  #include <string>
  #include <map>
+#endif
 
  // This is a GCC class, so GCC coding conventions on new bits.
  class module_resolver : public Cody::Resolver
diff --git a/gcc/cp/mapper-client.cc b/gcc/cp/mapper-client.cc
index 774e2b2b095..b9e02168d55 100644
--- a/gcc/cp/mapper-client.cc
+++ b/gcc/cp/mapper-client.cc
@@ -26,6 +26,7 @@ along with GCC; see the file COPYING3.  If not see
  #endif
  #define INCLUDE_STRING
  #define INCLUDE_VECTOR
+#define INCLUDE_MAP
  #include "system.h"
 
  #include "line-map.h"
diff --git a/gcc/cp/mapper-resolver.cc b/gcc/cp/mapper-resolver.cc
index bcf6c8871e5..db443fb4948 100644
--- a/gcc/cp/mapper-resolver.cc
+++ b/gcc/cp/mapper-resolver.cc
@@ -24,6 +24,7 @@ along with GCC; see the file COPYING3.  If not see
  #define INCLUDE_STRING
  #define INCLUDE_VECTOR
  #define INCLUDE_ALGORITHM
+#define INCLUDE_MAP
  #include "system.h"
 
  // We don't want or need to be aware of networking
-- 
2.24.1




More information about the Gcc-patches mailing list