Clarifying attribute-const
Richard Biener
richard.guenther@gmail.com
Fri Oct 2 08:25:00 GMT 2015
On Fri, Oct 2, 2015 at 1:40 AM, Geert Bosch <boschg@mac.com> wrote:
>
>> On Oct 1, 2015, at 11:34 AM, Alexander Monakov <amonakov@ispras.ru> wrote:
>>
>> Can you expand on the "etc." a bit, i.e., may the compiler ...
>>
>> - move a call to a "const" function above a conditional branch,
>> causing a conditional throw to happen unconditionally?
> No, calls may only be omitted, not moved.
>>
>> - move a call to a "const" function below a conditional branch,
>> causing an unconditional throw to happen only conditionally?
>> No, calls may only be omitted, not moved.
I think that's less clear as the transform basically duplicates the call
on both branches and removes the one that is not necessary.
>> - reorder calls to "const" functions w.r.t. code with side effects, or
>> other throwing functions?
> A call to a pure function (Ada's version of "const") may be omitted if its result is not used,
> or if results of an earlier call with the same argument values (including referenced values) can
> be used. This is allowed regardless of whether the original function had any side effects.
> Note that if a function raised an exception (threw) the call can only be replaced with throwing
> that exception.
>
> So, reordering is not allowed, but omitting is, in the context of Ada.
I think GCC does both though (if it throws only externally, for
internally throwing ones
the transforms would be too complicated).
Richard.
> -Geert
>
More information about the Gcc
mailing list