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

Message ID F0CB554C-D6D2-44F6-B0D7-A4035C68E528@sandoe.co.uk
State New
Headers show
Series
  • modules : Make sure we include <map> in system.h.
Related show

Commit Message

Iain Sandoe March 31, 2021, 8:50 p.m.
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(+)

-- 
2.24.1

Comments

Martin Sebor via Gcc-patches April 1, 2021, 8:07 a.m. | #1
On Wed, Mar 31, 2021 at 10:51 PM Iain Sandoe <iain@sandoe.co.uk> wrote:
>

> 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?


LGTM.

Thanks,
Richard.

> 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

>

>
Nathan Sidwell April 1, 2021, 11:42 a.m. | #2
On 3/31/21 4:50 PM, Iain Sandoe wrote:
> 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


ok, thanks for tracking this down!


-- 
Nathan Sidwell

Patch

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