https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66512

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Alexander Monakov from comment #2)
> In that case I'd like to contribute a documentation patch to make that clear
> in the pure/const attribute information, but I need more explanation.  I see
> that
> 
> int p(void) __attribute__((const));
> void f()
> {
>   p();
>   p();
> }
> 
> is optimized to an empty function, even though p may throw.  Is that not a
> bug?

I would say so.  But this has quite some implementation issues, also with...

> Also, could you please expand your explanation in the first paragraph, i.e.
> this:
> 
>   What we miss here is the fact that it should only matter
>   if p throws internally for IL consistency.  Of course it
>   still matters for observing other side-effects if p throws
>   and after the transform now does so before side-effects
>   that should be observed otherwise.
> 
> I'm probably missing a lot of contextual knowledge to understand that.  TIA.

... this, the side-effect ordering of stores and the throwing p() call is
not properly represented.

Reply via email to