[llvm-dev] [RFC] Should we add isa_or_null<>?

Don Hinton via llvm-dev llvm-dev at lists.llvm.org
Thu Apr 4 16:16:32 PDT 2019


I've added a patch, temporarily using the name Chris suggested.  Please let
me know what you think.

https://reviews.llvm.org/D60291

thanks...
don

On Thu, Apr 4, 2019 at 2:55 PM David Greene <dag at cray.com> wrote:

> Don Hinton <hintonda at gmail.com> writes:
>
> > >  if (isa_or_null<T>(var)) {
> > >    ...
> > >  }
> > >
> > >  at least according to what "isa_or_null" conveys to me.
> >
> > This is the same convention used by the existing "_or_null" varieties,
> > i.e., "cast_or_null" and "dyn_cast_or_null".  They accept a null and
> > propagate it.  In the "isa" case, it would accept a null and propagate
> > it as false.
>
> isa<> is very different from *cast<>.  *cast<> gives you a pointer back,
> which may be null.  isa<> is precondition check, so it "reads"
> differently to me.  If I were to see:
>
> if (isa_or_null<T>(var)) {
>   ...
> }
>
> I would think, "Ok, the body is fine if var is null."
>
> Instead:
>
> if (exists_and_isa<T>(var)) {
>   ...
> }
>
> This tells me that the body expects a non-null value.
>
> > >  That said, I'm not sure sure we need a special API for this.  Are
> > >  expensive calls used in the way you describe really common?
> >
> > I've only been looking at the ones involving method calls, but it's
> > not too common.  Perhaps a dozen in clang/lib -- haven't run it
> > against the rest of the code base.
>
> Thanks for checking.  I don't have a strong opinion about the need
> either way, but I do care that the spelling is clear and intuitive.
>
>                            -David
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190404/b831ec94/attachment.html>


More information about the llvm-dev mailing list