[PATCH] D146466: [clang] diagnose function fallthrough

David Blaikie via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 23 17:02:47 PDT 2023

dblaikie added a comment.

In D146466#4218011 <https://reviews.llvm.org/D146466#4218011>, @efriedma wrote:

> I think the reason "recoverable" ubsan causes trouble is that it introduces branches that subsequent optimizations can abuse.  So without ubsan, we just have an udiv instruction.  With ubsan, we conveniently have a branch on exactly the condition that would make the udiv undefined, so we can easily prove control flow doesn't continue after the ubsan handler.  Subsequent optimizations take advantage of that, so ubsan "breaks" code.  (So the code was never actually correct according to the semantic model, but it was broken in a way the compiler is less likely optimize.)

Ah, interesting - thanks for the explanation!

(but, yeah, not sure we can/should provide any further guarantees beyond "does /something/ after the sanitizer failure... " don't get stronger guarantees than without the sanitizer & while worth documenting that the sanitizer could make the problems after "recovery" worse than without the sanitizer enabled)

  rG LLVM Github Monorepo



More information about the llvm-commits mailing list