On Tue, Nov 11, 2014 at 11:46:55AM +0100, Richard Biener wrote: > > BTW: There are lots of places where std::swap can be used, a nice > > search-and-replace task for someone to start with gcc development. ;) > > Agreed ;) Note that we have to be careful to avoid pulling all of libstdc++ > into all files via system.h (system.h is so a bad thing... :/).
Apparently the nvptx port is another thing that fails to build because of the header ordering issues, this time not just when starting with clang, but just when building cross-compiler starting from gcc 4.9.1 on x86_64. There is: #include "config.h" #include "system.h" ... #include "hashtab.h" #include <sstream> and I get: g++ -c -g -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -fno-common -DHAVE_CONFIG_H -I. -I. -I../../gcc -I../../gcc/. -I../../gcc/../include -I../../gcc/../libcpp/include -I../../gcc/../libdecnumber -I../../gcc/../libdecnumber/dpd -I../libdecnumber -I../../gcc/../libbacktrace -o nvptx.o -MT nvptx.o -MMD -MP -MF ./.deps/nvptx.TPo ../../gcc/config/nvptx/nvptx.c In file included from /usr/include/c++/4.9.1/bits/basic_ios.h:37:0, from /usr/include/c++/4.9.1/ios:44, from /usr/include/c++/4.9.1/istream:38, from /usr/include/c++/4.9.1/sstream:38, from ../../gcc/config/nvptx/nvptx.c:54: /usr/include/c++/4.9.1/bits/locale_facets.h:240:53: error: macro "toupper" passed 2 arguments, but takes just 1 toupper(char_type *__lo, const char_type* __hi) const ^ and many more. As you said that we don't want to pull all of libstdc++ headers via system.h, looking at system.h, I see just the /* Define this so that inttypes.h defines the PRI?64 macros even when compiling with a C++ compiler. Define it here so in the event inttypes.h gets pulled in by another header it is already defined. */ #define __STDC_FORMAT_MACROS macro being critical to be included before any system headers, can't we move that into config.in/auto-host.h and just suggest header ordering of #include "config.h" #include <sstream> // or any other extra STL headers not provided by system.h you need #include "system.h" all other includes ? There are also some comments about stdarg.h and stdio.h ordering, dunno what it comes from and if it is still relevant when we require C++ compiler. Jakub