eugenis added a comment.

In D81678#2088284 <https://reviews.llvm.org/D81678#2088284>, @efriedma wrote:

> I usually like to start reading this sort of patch with the proposed LangRef 
> change, but I'm not seeing one.
>
> There are a couple of related issues here in the existing representation of 
> IR:
>
> 1. 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.
> 2. We don't currently have a way for frontends to indicate that a value is 
> guaranteed not to be poison, so we have to conservatively assume arguments 
> might be poison.  Whatever solution we come up with here should apply whether 
> or not msan is enabled.  An attribute like this will probably be useful for 
> "freeze" optimizations.
>
>   The partialinit attribute is, in some sense, backwards: the definition is 
> essentially "an argument *not* marked partialinit must not contain any poison 
> values".  We usually try to avoid negative reasoning like this; I'm afraid 
> it'll make transforms harder to reason about.


Yes, this is a bit awkward. There is a module flag 
"DisallowPoisonedCallArguments" that basically confirms that the frontend is 
aware of partialinit and any arguments not marked as such can be assumed strict 
(no-poison).

An alternative is to invert the meaning of the attribute and put it on all 
arguments that must be not poison. Those are a lot more common though.

The idea is that MSan can apply strict checking to arguments that are not 
"partialinit", and propagate the shadow to the callee for the rest.


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