diff mbox

[2/2] (header usage fix) include c++ headers in system.h

Message ID 5719F6C8.1060506@arm.com
State New
Headers show

Commit Message

Szabolcs Nagy April 22, 2016, 10:02 a.m. UTC
Some gcc source files include standard headers after
"system.h" but those headers may declare and use poisoned
symbols, they also cannot be included before "system.h"
because they might depend on macro definitions from there,
so they must be included in system.h.

This patch fixes the use of <list>, <map>, <set>, <vector>
and <algorithm> headers, by using appropriate
INCLUDE_{LIST, MAP, SET, VECTOR, ALGORITHM} macros.
(Note that there are some other system header uses which
did not get fixed.)

Build tested on aarch64-*-gnu, sh-*-musl, x86_64-*-musl and
bootstrapped x86_64-*-gnu (together with PATCH 1/2).

is this ok for AIX?
OK for trunk?

This would be nice to fix in gcc-6 too, because at least
with musl libc the bootstrap is broken.

gcc/ChangeLog:

2016-04-22  Szabolcs Nagy  <szabolcs.nagy@arm.com>

	* system.h (list, map, set, vector): Include conditionally.
	* auto-profile.c (INCLUDE_MAP, INCLUDE_SET): Define.
	* graphite-isl-ast-to-gimple.c (INCLUDE_MAP): Define.
	* ipa-icf.c (INCLUDE_LIST): Define.
	* config/aarch64/cortex-a57-fma-steering.c (INCLUDE_LIST): Define.
	* config/sh/sh.c (INCLUDE_VECTOR): Define.
	* config/sh/sh_treg_combine.cc (INCLUDE_ALGORITHM): Define.
	(INCLUDE_LIST, INCLUDE_VECTOR): Define.
	* cp/logic.cc (INCLUDE_LIST): Define.
	* fortran/trans-common.c (INCLUDE_MAP): Define.

Comments

James Greenhalgh April 22, 2016, 10:08 a.m. UTC | #1
On Fri, Apr 22, 2016 at 11:02:48AM +0100, Szabolcs Nagy wrote:
> Some gcc source files include standard headers after
> "system.h" but those headers may declare and use poisoned
> symbols, they also cannot be included before "system.h"
> because they might depend on macro definitions from there,
> so they must be included in system.h.
> 
> This patch fixes the use of <list>, <map>, <set>, <vector>
> and <algorithm> headers, by using appropriate
> INCLUDE_{LIST, MAP, SET, VECTOR, ALGORITHM} macros.
> (Note that there are some other system header uses which
> did not get fixed.)
> 
> Build tested on aarch64-*-gnu, sh-*-musl, x86_64-*-musl and
> bootstrapped x86_64-*-gnu (together with PATCH 1/2).
> 
> is this ok for AIX?
> OK for trunk?

The AArch64 part of this is OK.

Thanks,
James
Richard Biener April 22, 2016, 10:27 a.m. UTC | #2
On Fri, Apr 22, 2016 at 12:02 PM, Szabolcs Nagy <szabolcs.nagy@arm.com> wrote:
> Some gcc source files include standard headers after
> "system.h" but those headers may declare and use poisoned
> symbols, they also cannot be included before "system.h"
> because they might depend on macro definitions from there,
> so they must be included in system.h.
>
> This patch fixes the use of <list>, <map>, <set>, <vector>
> and <algorithm> headers, by using appropriate
> INCLUDE_{LIST, MAP, SET, VECTOR, ALGORITHM} macros.
> (Note that there are some other system header uses which
> did not get fixed.)
>
> Build tested on aarch64-*-gnu, sh-*-musl, x86_64-*-musl and
> bootstrapped x86_64-*-gnu (together with PATCH 1/2).
>
> is this ok for AIX?
> OK for trunk?

Ok for trunk and gcc-6.

Thanks,
Richard.

> This would be nice to fix in gcc-6 too, because at least
> with musl libc the bootstrap is broken.
>
> gcc/ChangeLog:
>
> 2016-04-22  Szabolcs Nagy  <szabolcs.nagy@arm.com>
>
>         * system.h (list, map, set, vector): Include conditionally.
>         * auto-profile.c (INCLUDE_MAP, INCLUDE_SET): Define.
>         * graphite-isl-ast-to-gimple.c (INCLUDE_MAP): Define.
>         * ipa-icf.c (INCLUDE_LIST): Define.
>         * config/aarch64/cortex-a57-fma-steering.c (INCLUDE_LIST): Define.
>         * config/sh/sh.c (INCLUDE_VECTOR): Define.
>         * config/sh/sh_treg_combine.cc (INCLUDE_ALGORITHM): Define.
>         (INCLUDE_LIST, INCLUDE_VECTOR): Define.
>         * cp/logic.cc (INCLUDE_LIST): Define.
>         * fortran/trans-common.c (INCLUDE_MAP): Define.
David Edelsohn April 22, 2016, 2:16 p.m. UTC | #3
On Fri, Apr 22, 2016 at 6:02 AM, Szabolcs Nagy <szabolcs.nagy@arm.com> wrote:
> Some gcc source files include standard headers after
> "system.h" but those headers may declare and use poisoned
> symbols, they also cannot be included before "system.h"
> because they might depend on macro definitions from there,
> so they must be included in system.h.
>
> This patch fixes the use of <list>, <map>, <set>, <vector>
> and <algorithm> headers, by using appropriate
> INCLUDE_{LIST, MAP, SET, VECTOR, ALGORITHM} macros.
> (Note that there are some other system header uses which
> did not get fixed.)
>
> Build tested on aarch64-*-gnu, sh-*-musl, x86_64-*-musl and
> bootstrapped x86_64-*-gnu (together with PATCH 1/2).
>
> is this ok for AIX?

It should be okay on AIX.

> OK for trunk?
>
> This would be nice to fix in gcc-6 too, because at least
> with musl libc the bootstrap is broken.
>
> gcc/ChangeLog:
>
> 2016-04-22  Szabolcs Nagy  <szabolcs.nagy@arm.com>
>
>         * system.h (list, map, set, vector): Include conditionally.
>         * auto-profile.c (INCLUDE_MAP, INCLUDE_SET): Define.
>         * graphite-isl-ast-to-gimple.c (INCLUDE_MAP): Define.
>         * ipa-icf.c (INCLUDE_LIST): Define.
>         * config/aarch64/cortex-a57-fma-steering.c (INCLUDE_LIST): Define.
>         * config/sh/sh.c (INCLUDE_VECTOR): Define.
>         * config/sh/sh_treg_combine.cc (INCLUDE_ALGORITHM): Define.
>         (INCLUDE_LIST, INCLUDE_VECTOR): Define.
>         * cp/logic.cc (INCLUDE_LIST): Define.
>         * fortran/trans-common.c (INCLUDE_MAP): Define.
Pedro Alves April 22, 2016, 5:56 p.m. UTC | #4
On 04/22/2016 11:02 AM, Szabolcs Nagy wrote:
> Some gcc source files include standard headers after
> "system.h" but those headers may declare and use poisoned
> symbols, 

Couldn't gcc simply allow use of poisoned symbols in
system headers?

It sounds like it'd avoid these odd contortions.

> they also cannot be included before "system.h"
> because they might depend on macro definitions from there,
> so they must be included in system.h.

Thanks,
Pedro Alves
diff mbox

Patch

diff --git a/gcc/auto-profile.c b/gcc/auto-profile.c
index 0c726bd..cd82ab4 100644
--- a/gcc/auto-profile.c
+++ b/gcc/auto-profile.c
@@ -19,6 +19,8 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MAP
+#define INCLUDE_SET
 #include "system.h"
 #include "coretypes.h"
 #include "backend.h"
@@ -31,10 +33,6 @@  along with GCC; see the file COPYING3.  If not see
 #include "cgraph.h"
 #include "gcov-io.h"
 #include "diagnostic-core.h"
-
-#include <map>
-#include <set>
-
 #include "profile.h"
 #include "langhooks.h"
 #include "cfgloop.h"
diff --git a/gcc/config/aarch64/cortex-a57-fma-steering.c b/gcc/config/aarch64/cortex-a57-fma-steering.c
index 21159fe..1bf804b 100644
--- a/gcc/config/aarch64/cortex-a57-fma-steering.c
+++ b/gcc/config/aarch64/cortex-a57-fma-steering.c
@@ -19,6 +19,7 @@ 
    <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_LIST
 #include "system.h"
 #include "coretypes.h"
 #include "backend.h"
@@ -37,8 +38,6 @@ 
 #include "cortex-a57-fma-steering.h"
 #include "aarch64-protos.h"
 
-#include <list>
-
 /* For better performance, the destination of FMADD/FMSUB instructions should
    have the same parity as their accumulator register if the accumulator
    contains the result of a previous FMUL or FMADD/FMSUB instruction if
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 8c8fe3c..b18e59b 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -20,9 +20,9 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include <sstream>
-#include <vector>
 
 #include "config.h"
+#define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
 #include "backend.h"
diff --git a/gcc/config/sh/sh_treg_combine.cc b/gcc/config/sh/sh_treg_combine.cc
index bc1ee0e..4d40715 100644
--- a/gcc/config/sh/sh_treg_combine.cc
+++ b/gcc/config/sh/sh_treg_combine.cc
@@ -19,6 +19,9 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_ALGORITHM
+#define INCLUDE_LIST
+#define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
 #include "backend.h"
@@ -32,10 +35,6 @@  along with GCC; see the file COPYING3.  If not see
 #include "tree-pass.h"
 #include "expr.h"
 
-#include <algorithm>
-#include <list>
-#include <vector>
-
 /*
 This pass tries to optimize for example this:
 	mov.l	@(4,r4),r1
diff --git a/gcc/cp/logic.cc b/gcc/cp/logic.cc
index e4967bb..c12c381 100644
--- a/gcc/cp/logic.cc
+++ b/gcc/cp/logic.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_LIST
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
@@ -45,8 +46,6 @@  along with GCC; see the file COPYING3.  If not see
 #include "toplev.h"
 #include "type-utils.h"
 
-#include <list>
-
 namespace {
 
 // Helper algorithms
diff --git a/gcc/fortran/trans-common.c b/gcc/fortran/trans-common.c
index 44787ae..4fdccc9 100644
--- a/gcc/fortran/trans-common.c
+++ b/gcc/fortran/trans-common.c
@@ -93,6 +93,7 @@  along with GCC; see the file COPYING3.  If not see
    block for each merged equivalence list.  */
 
 #include "config.h"
+#define INCLUDE_MAP
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
@@ -100,9 +101,6 @@  along with GCC; see the file COPYING3.  If not see
 #include "gfortran.h"
 #include "trans.h"
 #include "stringpool.h"
-
-#include <map>
-
 #include "fold-const.h"
 #include "stor-layout.h"
 #include "varasm.h"
diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c
index 88609c0..049a4c5 100644
--- a/gcc/graphite-isl-ast-to-gimple.c
+++ b/gcc/graphite-isl-ast-to-gimple.c
@@ -24,6 +24,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #ifdef HAVE_isl
 
+#define INCLUDE_MAP
 #include "system.h"
 #include "coretypes.h"
 #include "backend.h"
@@ -54,7 +55,6 @@  along with GCC; see the file COPYING3.  If not see
 #include "cfganal.h"
 #include "value-prof.h"
 #include "graphite.h"
-#include <map>
 
 /* We always try to use signed 128 bit types, but fall back to smaller types
    in case a platform does not provide types of these sizes. In the future we
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index aa6589c..dda5cac 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -52,6 +52,7 @@  along with GCC; see the file COPYING3.  If not see
 */
 
 #include "config.h"
+#define INCLUDE_LIST
 #include "system.h"
 #include "coretypes.h"
 #include "backend.h"
@@ -66,7 +67,6 @@  along with GCC; see the file COPYING3.  If not see
 #include "coverage.h"
 #include "gimple-pretty-print.h"
 #include "data-streamer.h"
-#include <list>
 #include "fold-const.h"
 #include "calls.h"
 #include "varasm.h"
diff --git a/gcc/system.h b/gcc/system.h
index cb54541..984f302 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -220,6 +220,18 @@  extern int errno;
 #if defined (INCLUDE_ALGORITHM) || !defined (HAVE_SWAP_IN_UTILITY)
 # include <algorithm>
 #endif
+#ifdef INCLUDE_LIST
+# include <list>
+#endif
+#ifdef INCLUDE_MAP
+# include <map>
+#endif
+#ifdef INCLUDE_SET
+# include <set>
+#endif
+#ifdef INCLUDE_VECTOR
+# include <vector>
+#endif
 # include <cstring>
 # include <new>
 # include <utility>