3 ms·
Usually but not always. For example, the removal of an empty effect free infinite loop. This should be an error.
by grumpyprole 2y ago
Usually but not always. For example, the removal of an empty effect free infinite loop. This should be an error.
- the8472 2y agoThe C++ forward progress guarantee enables more optimizations since it allows the compiler to reason more easily about loops: > The standards added the forward progress guarantees to change an optimization problem from "solve the halting problem" to "there will be observable side effects in the forms of termination, I/O, volatile, and/or atomic synchronization, any other operation can be reordered". The former is generally impossible to solve, whereas the latter is eminently tractable. But yeah, that's one of the more foot-gunny UB rules that Rust does not have. But it does mean it doesn't mark functions as `mustprogress` in LLVM IR which means it misses out on whatever optimizations that enables.