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.