Date: Fri, 18 Jul 2003 10:33:58 -0500 From: "Jacques A. Vidrine" <nectar@FreeBSD.org> To: Michael Nottebrock <michaelnottebrock@gmx.net> Cc: freebsd-current@freebsd.org Subject: Re: gcc-3.3 issues Message-ID: <20030718153358.GC67855@madman.celabo.org> In-Reply-To: <200307181032.59474.michaelnottebrock@gmx.net> References: <1058366903.81198.18.camel@skeeve> <20030717162554.680475cc.ak03@gte.com> <200307171650.15405@misha-mx.virtual-estates.net> <200307181032.59474.michaelnottebrock@gmx.net>
next in thread | previous in thread | raw e-mail | index | archive | help
[cc: list trimmed]
On Fri, Jul 18, 2003 at 10:32:51AM +0200, Michael Nottebrock wrote:
> I've tried to come up with a less obscure testcase:
>
> #include <string>
> #include <iostream>
> using namespace std;
>
> int main ()
> {
>
> string astring="Hello World";
> cout << astring << endl;
> }
>
> Now, if I compile this on 5.1-RELEASE with
>
> c++ -Wnon-virtual-dtor -Wno-long-long -Wall -pedantic -W -Wpointer-arith
> -Wmissing-prototypes -Wwrite-strings -DNDEBUG -DNO_DEBUG -O -pipe
> -mcpu=pentiumpro -fno-check-new -L/usr/local/lib -I/usr/local/include
> -I/usr/local/include -I/usr/X11R6/include -D_GETOPT_H -o helloworld
> helloworld.cc
>
> I get a plethora of warnings:
>
> In file included from /usr/include/g++/memory:55,
> from /usr/include/g++/string:48,
> from helloworld.cc:1:
> /usr/include/g++/bits/stl_alloc.h:979: warning: ISO C++ forbids the use of `
> extern' on explicit instantiations
> /usr/include/g++/bits/stl_alloc.h:980: warning: ISO C++ forbids the use of `
> extern' on explicit instantiations
> /usr/include/g++/bits/stl_alloc.h:981: warning: ISO C++ forbids the use of `
> extern' on explicit instantiations
> /usr/include/g++/bits/stl_alloc.h:981: warning: ISO C++ forbids the use of `
> extern' on explicit instantiations
> /usr/include/g++/bits/stl_alloc.h:981: warning: ISO C++ forbids the use of `
> extern' on explicit instantiations
>
> [and many, many more]
>
> but it will compile. If I omit -pedantic, none of these warnings occur. The
> thing is, in -CURRENT with the new gcc, all these warnings for some reason
> become errors. The other thing is, if I try this with with a ports-compiled
> g++32 on 4-STABLE, I don't get warnings at all, no matter if -pedantic is
> specified or not.
>
> So here's the questions for the experts:
>
> - Why errors instead of warnings?
> - Why do gcc's own bits seem to not conform to some kind of standard that it
> tries to adhere to in 5-CURRENT but not in 4-STABLE?
> - Who's to blame?
I haven't looked recently, but I seem to recall that the STL and other
C++ header bits that we install in /usr/include are from an older GCC
release than the compiler. On my pre-GCC 3.3 -CURRENT system:
System compiler:
% g++ -c -Wall -pedantic hello.cc
<many warnings>
GCC 3.2 from ports:
% g++32 -c -Wall -pedantic hello.cc
<no warnings>
GCC 3.3 from ports:
% g++33 -c -Wall -pedantic hello.cc
<no warnings>
I also recall lots of missing `typename's in the system headers that were
resolved in the actual GCC distribution.
Alexander, do the STL headers et. al. get updated with the rest of the
compiler chain?
Cheers,
--
Jacques Vidrine . NTT/Verio SME . FreeBSD UNIX . Heimdal
nectar@celabo.org . jvidrine@verio.net . nectar@freebsd.org . nectar@kth.se
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030718153358.GC67855>
