Aus dem Changelog von LLVM 20 [0]:Clang will now more aggressively use undefined behavior on pointer addition overflow for optimization purposes. For example, a check like ptr + unsigned_offset
NEEEIIIIIN!!!!!
Das heißt: Alter Code, der versucht, Dinge richtig zu machen, und nach Overflows guckt, aber es formaljuristisch nicht korrekt macht, kriegt jetzt Sicherheitslücken übergeholfen, die vorher nicht da waren.
Glücklicherweise sind die Standardisierungsleute bei C++ gerade dabei, der Reihe nach undefined behavior aus dem Standard zu schmeißen. C wird ein paar Jahrzehnte später nachfolgen. Bis dahin wird C leider völlig irrelevant sein.
Tja, so kann man sich auch den Fuß schießen. *slow clap*
Wenn ihr solchen Code produziert habt, und euch jetzt fragt, wie man den Check korrekt formuliert: Vorher nach uintptr_t casten. Das ist zwar formaljuristisch auch falsch, denn der Standard sagt, uintptr_t ist groß genug, um einen Pointer zu halten, aber garantiert nicht, dass es nicht größer ist, was dann den Overflow verbergen würde. Aber in der Praxis ist sizeof(uintptr_t) == sizeof(void*).
[0] https://releases.llvm.org/20.1.0/tools/clang/docs/ReleaseNotes.html
https://blog.fefe.de/?ts=99001e82