https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81774
--- Comment #3 from Piotr <pj at hugeone dot co.uk> --- And what about if volatile variable changes during the multiplications. Mybe not in this example but if y was declared global - it can be interrupted between multiplications. volatile int y; int x3(int x) { return y * y * y * y; }