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

Reply via email to