<div dir="ltr"><div dir="ltr">Hi David:</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Apr 5, 2019 at 7:50 AM David Chisnall via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 05/04/2019 09:13, via llvm-dev wrote:<br>
> I think "isa_nonnull" would read fine too. To me, the extra "and" makes <br>
> the ordering more of an issue.<br>
<br>
At the risk of bikeshedding:<br>
<br>
To me, isa_nonnull sounds as if the caller is guaranteeing that the <br>
argument is nonnull.  I don't think I've seen it in LLVM, but elsewhere <br>
I've come across a convention of adding nonnull variants of functions <br>
that skip null checks and pass the non-null restriction to the caller.<br>
<br>
I wonder if the better solution is to rename isa to isa_nonnull and <br>
introduce a new isa that can take a null argument.  If these have the <br>
correct nullability annotations then anyone building with clang should <br>
get a warning if they use the wrong one...<br></blockquote><div><br></div><div>I like your logic, but not sure it's feasible to detect which one you should use in all cases, e.g., if the user already knows `p` can't be null, they just use `isa`.  However, if it could be null, they use `p && isa<X>(p)`, `cast_or_null` or `dyn_cast_or_null`.  So, we could switch all the current uses of `isa` to the null variety when we make the change, but wouldn't we have to trust the user from them on.  </div><div><br></div><div>Also, wouldn't this be a pretty big change across llvm and all subprojects, and be an issue for downstream projects. </div><div><br></div><div>thanks...</div><div>don </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
David<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div>