Recent warning regression in libstdc++-v3/libsupc++
Mark Mitchell
mark@codesourcery.com
Wed Jul 23 17:56:00 GMT 2008
Paolo Carlini wrote:
> Now, however, I'm not sure to understand which kind of way forward
> you can see... Should the warning machinery be smart enough to not
> warn at all in this case? Or? Sorry, probably it's just my ignorance
> about those issues at the interface between core and library, I would
> really appreciate a bit of additional guidance.
Sorry, I may have answered some other question than the one I should
have. :-)
I don't think this is easy. This is a function in the library, but one
the compiler needs to know about. So, should the compiler warn if the
declaration doesn't match its expectations? I think the answer is yes
-- but only if the declaration is significantly different, like has
different argument types.
There's no single right answer for the declaration used in the C++
run-time support library. My implementation might use "throw()", but
yours might not have a throw-specifier at all, and both of us have
correct implementations. However, I do think it's reasonable to say
that, independent of the declaration, this function can never throw an
exception. So, here's what I think:
1. The compiler's built-in declaration should include "throw()". That
will help us get good code when calling the function inside the
compiler; the rest of the compiler will know no exceptions are leaving
this function.
2. Ideally, the libstdc++ declaration should also use "throw()", and all
callees should be "throw()", since that will generate the best code, and
is the obvious right answer.
3. Ideally, the compiler should not warn when encountering a run-time
library declaration doesn't include the "throw()". (However, I think it
would be OK to warn if it sees "throw (X)", even though that's less
restrictive than no throw-specifier at all, as "throw (X)" indicates
that somebody seems to think this function is actually going to throw an
exception, which is weird.)
Note that if (1) and (2) are done, though, (3) can be a future project;
it only affects other C++ library implementations, and we don't care so
much about that.
Does that help?
--
Mark Mitchell
CodeSourcery
mark@codesourcery.com
(650) 331-3385 x713
More information about the Libstdc++
mailing list