| ▲ | maccard a day ago | |||||||||||||||||||||||||
> There's nothing unexpected in the snippet posted. > The issue is cause by C declaring that dereferencing a null pointer is UB. It's not really an issue with assertions. > You can get the same optimisation-removes-code for any UB. I disagree - It’s a 4 line toy example but in a 30-40 line function these things are not always clear. The actual problem is if you compile with NDEBUG=1, the nullptr check is removed and the optimiser can (and will, currently) do unexpected things. The printf sample above is a good example of the side effects. | ||||||||||||||||||||||||||
| ▲ | IshKebab a day ago | parent [-] | |||||||||||||||||||||||||
> The actual problem is if you compile with NDEBUG=1 That is entirely expected by any C programmer. Sure they named things wrong - it should have been something like `assert` (always enabled) and `debug_assert` (controlled by NDEBUG), as Rust did. And I have actually done that in my C++ code before. But I don't think the mere fact that assertions can be disabled was the issue that was being alluded to. | ||||||||||||||||||||||||||
| ||||||||||||||||||||||||||