The following lines of code used to compile well using gcc-2.95.x: #include <sys/stream.h> #include <queue> using namespace std;
int main() { queue<int> q; q.push(0); } When this is compiled using gcc-3.4.2 the following error is reported: *machine_202>g++ test.cpp -v Reading specs from /usr/tools/upgrade/gnu/gcc/3.4.2/lib/gcc/sparc-sun- solaris2.8/3.4.2/specs Configured with: /net/machine/maketools/src/gcc-3.4.2/configure -- prefix=/usr/tools/upgrade/gnu/gcc/3.4.2 --with-local- prefix=/usr/tools/upgrade/gnu/gcc/3.4.2 --with-gnu-as --with- as=/usr/tools/upgrade/gnu/gcc/3.4.2/bin/as --with-gnu-ld --with- ld=/usr/tools/upgrade/gnu/gcc/3.4.2/bin/ld --enable-version-specific-runtime- libs --enable-languages=c,c++ -v Thread model: posix gcc version 3.4.2 /usr/tools/upgrade/gnu/gcc/3.4.2/libexec/gcc/sparc-sun- solaris2.8/3.4.2/cc1plus -quiet -v test.cpp -quiet -dumpbase test.cpp -mcpu=v7 - auxbase test -version -o /var/tmp//ccSCOiZu.s ignoring nonexistent directory "/usr/tools/upgrade/gnu/gcc/3.4.2/lib/gcc/sparc- sun-solaris2.8/3.4.2/../../../../sparc-sun-solaris2.8/include" #include "..." search starts here: #include <...> search starts here: /usr/tools/upgrade/gnu/gcc/3.4.2/lib/gcc/sparc-sun-solaris2.8/3.4.2/include/c++ /usr/tools/upgrade/gnu/gcc/3.4.2/lib/gcc/sparc-sun- solaris2.8/3.4.2/include/c++/sparc-sun-solaris2.8 /usr/tools/upgrade/gnu/gcc/3.4.2/lib/gcc/sparc-sun- solaris2.8/3.4.2/include/c++/backward /usr/tools/upgrade/gnu/gcc/3.4.2/include /usr/tools/upgrade/gnu/gcc/3.4.2/lib/gcc/sparc-sun-solaris2.8/3.4.2/include /usr/include End of search list. GNU C++ version 3.4.2 (sparc-sun-solaris2.8) compiled by GNU C version 3.4.2. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 test.cpp: In function `int main()': test.cpp:7: error: `queue' undeclared (first use this function) test.cpp:7: error: (Each undeclared identifier is reported only once for each function it appears in.) test.cpp:7: error: expected primary-expression before "int" test.cpp:7: error: expected `;' before "int" test.cpp:8: error: `q' undeclared (first use this function) I think we have a fixincludes regression. The following output is generated when creating a 2.95.2 sparc-sun-solaris2.8 compiler: cd ./fixinc; /bin/sh ${srcdir}/mkfixinc.sh sparc-sun-solaris2.8 constructing ../fixinc.sh for sparc-sun-solaris2.8 copying /net/netapp/vol/releng1/releng/maketools/sparc-sun- solaris2.7/tools/cross/gcc-2.95.2/gcc/fixinc/fixinc.wrap to ../fixinc.sh rm -rf include; mkdir include TARGET_MACHINE=sparc-sun-solaris2.8; srcdir=`cd ../../src/gcc; pwd`; \ INSTALL_ASSERT_H=install-assert-h; SHELL=/bin/sh ;\ export TARGET_MACHINE srcdir INSTALL_ASSERT_H SHELL ; \ /bin/sh ./fixinc.sh `pwd`/include /usr/tools/sparc-sun-solaris2.8/sys-include Building fixed headers in /net/netapp/vol/releng1/releng/maketools/sparc-sun- solaris2.7/tools/cross/b-sparc-sun-solaris2.8/gcc/include Checking /usr/tools/sparc-sun-solaris2.8/sys-include/math.h Fixed math.h Checking /usr/tools/sparc-sun-solaris2.8/sys-include/sys/stream.h Fixed sys/stream.h Checking /usr/tools/sparc-sun-solaris2.8/sys-include/curses.h Fixed curses.h rm -f include/syslimits.h if [ -f include/limits.h ]; then \ mv include/limits.h include/syslimits.h; \ else \ cp ../../src/gcc/gsyslimits.h include/syslimits.h; \ fi chmod a+r include/syslimits.h if [ "/usr/tools/sparc-sun-solaris2.8/sys-include" = "/usr/tools/sparc-sun- solaris2.8/sys-include" ] \ && [ -d /usr/tools/sparc-sun-solaris2.8/sys-include ]; then \ if [ -d /usr/tools/lib ] ; then true ; else mkdir /usr/tools/lib ; fi; \ if [ -d /usr/tools/lib/gcc-lib ] ; then true ; else mkdir /usr/tools/lib/gcc- lib; fi; \ if [ -d /usr/tools/lib/gcc-lib/sparc-sun-solaris2.8 ] ; then true ; else mkdir /usr/tools/lib/gcc-lib/sparc-sun-solaris2.8 ; fi; \ if [ -d /usr/tools/lib/gcc-lib/sparc-sun-solaris2.8/2.95.2 ] ; then true ; else mkdir /usr/tools/lib/gcc-lib/sparc-sun-solaris2.8/2.95.2 ; fi; \ else true; fi touch stmp-fixinc We can see that when the gcc-2.95.2 compiler is created, fixincludes creates a wrapper for sys/stream.h. When we create a 3.4.2 sparc-sun-solaris2.8 compiler sys/stream.h is missed during the fixincludes process: (TARGET_MACHINE='sparc-sun-solaris2.8'; srcdir=`cd ../../src/gcc; ${PWDCMD-pwd} `; \ SHELL='/bin/sh' ;\ export TARGET_MACHINE srcdir SHELL ; \ /bin/sh ./fixinc.sh `${PWDCMD-pwd} `/include /usr/tools/upgrade/gnu/gcc/3.4.2/lib/gcc/sparc-sun- solaris2.8/3.4.2/../../../../sparc-sun-solaris2.8/sys-include ; \ rm -f include/syslimits.h; \ if [ -f include/limits.h ]; then \ mv include/limits.h include/syslimits.h; \ else \ cp ../../src/gcc/gsyslimits.h include/syslimits.h; \ fi; \ chmod a+r include/syslimits.h) Fixing headers into /net/machine/maketools/sparc-sun-solaris2.7/tools/cross- 3.4.2/gcc/b-sparc-sun-solaris2.8/gcc/include for sparc-sun-solaris2.8 target Finding directories and links to directories Searching /disk2/releng/tools/upgrade/gnu/gcc/3.4.2/sparc-sun-solaris2.8/sys- include/. Making symbolic directory links Fixing directory /disk2/releng/tools/upgrade/gnu/gcc/3.4.2/sparc-sun- solaris2.8/sys-include into /net/machine/maketools/sparc-sun- solaris2.7/tools/cross-3.4.2/gcc/b-sparc-sun-solaris2.8/gcc/include Applying io_quotes_def to net/ppp-comp.h Applying io_quotes_def to net/pppio.h Applying io_quotes_use to net/pppio.h Applying io_quotes_def to inet/optcom.h Applying ip_missing_semi to netinet/ip.h Applying sun_auth_proto to rpc/auth.h Fixed: rpc/auth.h Applying sun_auth_proto to rpc/clnt.h Fixed: rpc/clnt.h Applying sun_auth_proto to rpc/svc.h Fixed: rpc/svc.h Applying sun_auth_proto to rpc/xdr.h Fixed: rpc/xdr.h Applying io_quotes_def to sys/pcmcia/pcelx.h Applying io_quotes_def to sys/scsi/adapters/glmvar.h Applying io_quotes_def to sys/acctctl.h Applying io_quotes_def to sys/audio_4231.h Applying io_quotes_def to sys/audiovar.h Applying io_quotes_use to sys/cs.h Applying io_quotes_use to sys/cs_priv.h Applying io_quotes_def to sys/fdvar.h Applying io_quotes_def to sys/ioccom.h Applying io_quotes_use to sys/msreg.h Fixed: sys/msreg.h Applying io_quotes_def to sys/pcmcia.h Applying io_quotes_use to sys/pcmcia.h Applying io_quotes_def to sys/pem.h Applying io_quotes_use to sys/pem.h Applying io_quotes_def to sys/rce.h Applying io_quotes_use to sys/rce.h Applying svr4_sighandler_type to sys/signal.h Fixed: sys/signal.h Applying io_quotes_def to sys/thread.h Applying gnu_types to sys/types.h Fixed: sys/types.h Applying AAB_solaris_sys_varargs_h to sys/varargs.h Fixed: sys/varargs.h Applying svr4__p to floatingpoint.h Fixed: floatingpoint.h Applying limits_ifndefs to limits.h Fixed: limits.h Applying sun_malloc to malloc.h Applying math_exception to math.h Applying svr4__p to math.h Fixed: math.h Applying solaris_mutex_init_2 to pthread.h Fixed: pthread.h Applying gnu_types to stddef.h Fixed: stddef.h Applying stdio_stdarg_h to stdio.h Applying stdio_va_list to stdio.h Fixed: stdio.h Applying solaris_stdio_tag to stdio_tag.h Fixed: stdio_tag.h Applying sysv68_string to string.h Cleaning up unneeded directories: fixincludes is done echo timestamp > stmp-fixinc I believe we need to include some extra fixincludes for sys/stream.h in the file gcc/fixinc/inclhack.def when compiling for the solaris platform. -- Summary: C++ std::queue conflicts with C header 'struct queue' Product: gcc Version: 3.4.2 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dkavedku at yahoo dot com CC: dkavedku at yahoo dot com,gcc-bugs at gcc dot gnu dot org GCC build triplet: sparc-sun-solaris2.8 GCC host triplet: sparc-sun-solaris2.8 GCC target triplet: sparc-sun-solaris2.8 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20400