Message ID | 5719F6C8.1060506@arm.com |
---|---|
State | New |
Headers | show |
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
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.
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.
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 --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>