nlopes added a comment.

(repost my message from llvm-dev)

I can add one thought regarding why this direction makes sense and why it 
doesn't constrain optimizations.

Traditionally we don't want to mark too many things as UB as it restricts code 
movement and thus limits optimizations. That's why we have poison for e.g. 
signed arithmetic overflow rather than using UB as allowed by the C standard.
For function calls, however, optimizers are already super constrained: in 
general we cannot move them around because they may not return, they may throw 
an exception, they may modify memory, do a syscall, and so on. So adding 
another restriction to function calls isn't a big deal; optimizers don't touch 
them that much anyway.

This proposal adds more UB, as it turns undef/poison into UB on function calls, 
but that doesn't limit optimizations. So it seems like a good tradeoff: we 
learn some values can't be undef/poison "for free".  Plus that UB can be 
dropped if needed; dropping noundef is legal! So there are really no downsides.
That's why I believe this is a good direction for clang.

From the users perspective, hopefully the sanitizers can already flag related 
issues so hopefully this won't lead to hard-to-debug UB bugs.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D105169/new/

https://reviews.llvm.org/D105169

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to