This is the mail archive of the
mailing list for the GCC project.
Re: Clarifying attribute-const
- From: Geert Bosch <boschg at mac dot com>
- To: Alexander Monakov <amonakov at ispras dot ru>
- Cc: Eric Botcazou <ebotcazou at adacore dot com>, gcc at gcc dot gnu dot org
- Date: Thu, 01 Oct 2015 19:40:23 -0400
- Subject: Re: Clarifying attribute-const
- Authentication-results: sourceware.org; auth=none
- References: <alpine dot LNX dot 2 dot 20 dot 1509251933001 dot 23590 at monopod dot intra dot ispras dot ru> <1449338 dot uM7p4ILj71 at polaris> <alpine dot LNX dot 2 dot 20 dot 1510011821460 dot 15118 at monopod dot intra dot ispras dot ru>
> On Oct 1, 2015, at 11:34 AM, Alexander Monakov <email@example.com> 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.
> - 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
So, reordering is not allowed, but omitting is, in the context of Ada.