This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Clarifying attribute-const

On Fri, Oct 2, 2015 at 1:40 AM, Geert Bosch <> wrote:
>> On Oct 1, 2015, at 11:34 AM, Alexander Monakov <> 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).


>   -Geert

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]