This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: GCC 3.3, GCC 3.4
- From: Mark Mitchell <mark at codesourcery dot com>
- To: Zack Weinberg <zack at codesourcery dot com>, Gabriel Dos Reis <gdr at integrable-solutions dot net>, "lsb-cxx at freestandards dot edu" <lsb-cxx at freestandards dot edu>, "debian-gcc at lists dot debian dot org" <debian-gcc at lists dot debian dot org>
- Cc: Benjamin Kosnik <bkoz at redhat dot com>, "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Fri, 31 Jan 2003 08:25:28 -0800
- Subject: Re: GCC 3.3, GCC 3.4
--On Thursday, January 30, 2003 04:52:41 PM -0800 Zack Weinberg
<zack@codesourcery.com> wrote:
I'm relaying this to the LSB working group in charge of C++ and also
to the Debian gcc team -- Debian is presently in the process of
transitioning to the 3.2 ABI and I am pretty sure they also were
operating under the assumption that it would not change ever again.
I know that we will change the C++ ABI a little bit more. Here are
the two areas that I know are buggy, and are buggy in ways that affect
correctness:
- Name mangling
Due to not being able to know exactly what's a dependent name and
what's not, there are some (obscure) cases involving templates where
we cannot really produce the right name given what we have now.
These cases are sufficiently odd that I'm not sure anyone will ever
run into them in real code. For example, I doubt they come up in
V3.
- Object layout
For the most part, these are bugs involving empty class conflicts. As
far as I know, we've fixed all of these -- I do not know of any more
and I know we've looked pretty hard, in various ways. There is also at
least one bug involving virtual bases that might be somewhat more common.
I think the thing to do is wait until we are very confident that we've
finally nailed the name mangling issues and until the V3 people they've
nailed the runtime issues and then change the defaults. I don't know
much about the runtime side, but on the compiler side, I expect that
few people will notice.
To some extent, I think there's a communication issue. We (rightly) take
seriously *any* ABI change, but some are a lot more serious than others.
These are more like "If you have more than 32 parameters to a
function, and 14 of them are floats, and 18 are long doubles, and you
use varargs, then we quite match the spec" than "the size of int
will be now be 5" or "floating point values will now be passed on the
stack."
If we just said "this new version fixes a bug where two empty classes
of the same type can end up at the same address", people probably
wouldn't worry much -- but saying "we're breaking the C++ ABI" makes
them worry. Both perspectives are correct: they should worry, but not
*too* much.
--
Mark Mitchell mark@codesourcery.com
CodeSourcery, LLC http://www.codesourcery.com