This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: throw(), pure and const flags on functions
On Tue, Apr 14, 2009 at 10:11 AM, Mark Mitchell <mark@codesourcery.com> wrote:
> Paolo Carlini wrote:
>
>>> Only functions both defined and used within single compilation unit are
>>> fine without decorations. ?LTO change definition of compilation unit to
>>> "whole program without shared libraries".
>
> Paolo, you asked my opinion on this. ?My feeling is that, of course, it
> would be best if the compiler could figure this out. ?But, in many cases
> it cannot even in theory (as soon as there's a function call to a
> function it can't see, including a call through a function pointer).
> Calls to C library functions are one special case; if those are not
> decorated with "throw()", for example, then the compiler may not realize
> that they do not throw. ?That's not much of problem when using GLIBC,
> since it has the annotations, but other C libraries are not as good
> about that -- and GLIBC probably doesn't have "pure" and "const" in all
> possible places.
Many of the C functions we call are standard C functions.
The compiler already optimizes those functions based on their
C standard semantics without assuming any GLIBC specific
semantics. I think the compiler could just rely on those semantics
in this case too.