Clarifying attribute-const
Eric Botcazou
ebotcazou@adacore.com
Fri Sep 25 22:14:00 GMT 2015
> First, a belated follow-up to https://gcc.gnu.org/PR66512 . The bug is
> asking why attribute-const appears to have a weaker effect in C++, compared
> to C. The answer in that bug is that GCC assumes that attribute-const
> function can terminate by throwing an exception.
FWIW there is an equivalent semantics in Ada: the "const" functions can throw
and the language explicitly allows them to be CSEd in this case, etc.
> That doesn't actually seem reasonable. Consider that C counterpart to
> throwing is longjmp; it seems to me that GCC should behave consistently:
> either assume that attribute-const may both longjmp and throw (I guess
> nobody wants that), or that it may not longjmp nor throw. Intuitively, if
> "const" means "free of side effects so that calls can be moved
> speculatively or duplicated", then non-local control flow transfer via
> throwing should be disallowed as well.
This would pessimize a lot languages where exceptions are pervasive.
> In any case, it would be nice the intended compiler behavior could be
> explicitely stated in the manual.
Agreed.
--
Eric Botcazou
More information about the Gcc
mailing list