aboutsummaryrefslogtreecommitdiff
path: root/gcc/system.h
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2022-05-02 07:10:14 +0200
committerJakub Jelinek <jakub@redhat.com>2022-05-02 07:10:14 +0200
commit4a0e89b10f6bdc1e285e0b9e6a435a0062f8936c (patch)
treefcf4bb58f7c30dd816697817ca2cea2d46510cf1 /gcc/system.h
parent28cfea987e12413a85a4fa1942800100c43d4b40 (diff)
downloadgcc-4a0e89b10f6bdc1e285e0b9e6a435a0062f8936c.zip
gcc-4a0e89b10f6bdc1e285e0b9e6a435a0062f8936c.tar.gz
gcc-4a0e89b10f6bdc1e285e0b9e6a435a0062f8936c.tar.bz2
system.h: Include <initializer_list> in system.h unconditionally
On Sun, May 01, 2022 at 07:06:53PM +0100, Jonathan Wakely wrote: > > >> the reason is that "gcc/analyzer/region-model.cc” uses initializer_lists, and it seems that <initializer_list> > > >> is not transitively included by any used headers for _LIBCPP_VERSION < 4000. I fixed that locally by > > >> adding initializer_list into system.h (and adding INCLUDE_INITIALIZER_LIST to the top of gcc/analyzer/region-model.cc) > > >> - with that change those versions do bootstrap and test OK*** > > > > > > From what I can see, with libstdc++ it works because <utility> which is > > > included by system.h includes <initializer_list>. > > > If I rename initializer_list in analyzer/region-model.ii to initializer_listx, I > > > also get: > > > ../../gcc/analyzer/region-model.cc: In function ‘void ana::selftest::test_binop_svalue_folding()’: > > > ../../gcc/analyzer/region-model.cc:4966:48: error: deducing from brace-enclosed initializer list requires ‘#include <initializer_list>’ > > > 4508 | > > > +++ |+#include <initializer_list> > > > 4509 | static void > > > ...... > > > 4966 | for (auto op : {BIT_IOR_EXPR, TRUTH_OR_EXPR}) > > > | ^ > > > ../../gcc/analyzer/region-model.cc:4978:49: error: deducing from brace-enclosed initializer list requires ‘#include <initializer_list>’ > > > 4978 | for (auto op : {BIT_AND_EXPR, TRUTH_AND_EXPR}) > > > | ^ > > > > > > I think we have 2 options, one is do what you wrote above, > > > INCLUDE_INITIALIZER_LIST defined before system.h to get #include <initializer_list>. > > > The other option is just to include that unconditionally, it is a very small > > > header. For libstdc++ it will make no difference as it is included anyway > > > and the header is really small there, libc++ includes <cstddef> which isn't > > > normally included and system.h includes <stddef.h> instead. > > > > I’d say unconditionally would be OK. I suppose the chance that any host > > C++ is good enough to build GCC as-is but fails to provide > > <initializer_list> is zero? > > > > Yes, definitely. > > > I’d be OK to do this change without a new RC even. 2022-05-02 Jakub Jelinek <jakub@redhat.com> * system.h: Include initializer_list.
Diffstat (limited to 'gcc/system.h')
-rw-r--r--gcc/system.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/system.h b/gcc/system.h
index c25cd64..c5562cc 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -239,6 +239,7 @@ extern int errno;
# include <functional>
#endif
# include <cstring>
+# include <initializer_list>
# include <new>
# include <utility>
# include <type_traits>