3 ms·
I'm wondering if the exception is when the preceding ring_bell() function never returns? Then there is no undefined behavior since the line with undefined behav
by ambrop7 12y ago
I'm wondering if the exception is when the preceding ring_bell() function never returns? Then there is no undefined behavior since the line with undefined behavior is never reached.
So one could conclude that the compiler has to prove termination of ring_bell() before performing the optimization discussed, which is impossible for just any external function.
- mihai_ionic 12y agoAccording to the C++11 standard, the compiler may assume that any loop terminates, so unless you mark ring_bell as [[noreturn]], the code will be assumed reachable. Furthermore, when undefined behaviour is invoked anywhere within a program, the whole program is undefined.
- robryk 12y agoAs far as I remember, you are wrong: a loop with side effects (either external IO or volatile reads/writes) is allowed to never terminate.