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