efriedma added a comment.

In D81678#2089041 <https://reviews.llvm.org/D81678#2089041>, @aqjune wrote:

> > @efriedma 
> >  The way that call argument coercion works is unsound in the presence of 
> > poison. An integer can't be partially poisoned: it's either poison, or not 
> > poison. We probably need to come up with some safer way to pass 
> > structs/unions.
>
> This is true, clang frontend may lower an argument with aggregate type into 
> one with large int type (such as i64).
>  However, can poison value be safely generated in C? Paddings or union with 
> different size may contain undef bits, but not poison. Signed overflow is UB.
>  Undef value can exist bitwisely, so I think this is an orthogonal issue.


In C semantics, an expression can't produce a poison value.  As long as 
variables and allocations are initialized to undef, not poison, there isn't any 
way to sneak poison into the padding of a variable, so argument passing is 
sound.  So I guess it's not an issue unless we start poisoning uninitialized 
variables.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81678



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

Reply via email to