logoalt Hacker News

mitxelatoday at 12:59 PM1 replyview on HN

You might ask why it's important that the first loop terminates since in this case the extra side effect would just be a dead store - but if the first loop doesn't terminate then it's possible B is an invalid pointer and then accessing it during the first loop is UB when it shouldn't be. Making a nonterminating loop UB is the patch for this.

The standard example is a linked list instead of an array because the compiler can't prove it never has a cycle.


Replies

CamperBob2today at 4:46 PM

The complaint I have is that for the sake of benchmark wars, UB has been retconned from "The code might not behave the way you want under certain conditions on certain platforms, hopefully you know what you're doing" to "The compiler can do anything it wants, including rickrolling the user."

That is no longer undefined behavior in my book. That is defined behavior that just has an unusually-shitty definition.

It's all moot anyway given other trends in progress, but... UB, bah humbug. Stop trying to fix problems that no one had. This is why people are clamoring to replace C/C++ with Rust and AI and whatever. The language needed to become more understandable and more predictable in everyday use, and instead it got worse.

show 1 reply