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.n...@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.
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>

Reply via email to