| ▲ | sgerenser an hour ago | |
-O3 gained a reputation of being more likely to "break" code, but in reality it was almost always "breaking" code that was invalid to start with (invoked undefined behavior). The problem is C and C++ have so many UB edge cases that a large volume of existing code may invoke UB in certain situations. So -O2 thus had a reputation of being more reliable. If you're sure your code doesn't invoke undefined behavior, though, then -O3 should be fine on a modern compiler. | ||
| ▲ | drob518 14 minutes ago | parent [-] | |
Exactly. A lot of people didn’t understand the contract between the programmer and the compiler that is required to use -O3. | ||